红联Linux门户
Linux帮助

Case 语句不执行,大家快来看看,到底什么原因。。。。

发布时间:2011-04-07 10:46:33来源:红联作者:牟头人
今天写了个简单的shell脚本,测试下case语句,居然发现一个奇怪的现象。程序如下

#!/bin/sh
echo 'Hit a key, then hit return.'
read Keypress
case "$Keypress" in
[a-z] ) echo "Lowercase letter";;
[A-Z] ) echo "Uppercase letter";;
[0-9] ) echo 'Digit';;
* ) echo 'Punctuation, whitespace,or other';;
esac

运行时发现第二个case 总是没运行,输入大写字母的时候仍然打印Lowercase letter.

当我把a-z] ) echo "Lowercase letter";; 和 [A-Z] ) echo "Uppercase letter";; 换位置的时候,输入小写字母的时候又显示 Uppercase letter!


麻烦大家帮我看看是什么问题

顺便问下 cat > hello << MY_PROMGRAM 是表示什么?

谢谢解答
文章评论

共有 7 条评论

  1. honglianqxw123 于 2012-05-21 08:36:27发表:

    学习了,shell编程。谢谢。

  2. 于 2012-05-16 08:20:30发表:

    #[a-z] 和 [A-Z].
    # 这种用法在某些特定场合的或某些Linux发行版中不能够正常工作.
    #写成下面的方式

    #!/bin/bash
    # 测试字符串范围.

    echo; echo "Hit a key, then hit return."
    read Keypress

    case "$Keypress" in
    [[:lower:]] ) echo "Lowercase letter" ;;
    [[:upper:]] ) echo "Uppercase letter" ;;
    [0-9] ) echo "Digit" ;;
    * ) echo "Punctuation, whitespace, or other" ;;
    esac

  3. 于 2012-02-25 14:43:23发表:

    我也出现了一样的问题 请问楼主解决了吗 我用的是笔记本

  4. hml1006 于 2011-04-07 15:15:25发表:

    shell编程不是很熟

  5. chengshiding 于 2011-04-07 13:47:28发表:

    复制上面的内容到test文件里。
    [shiding:bin]#chmod +x ./test
    [shiding:bin]#./test
    Hit a key, then hit return.
    f
    Lowercase letter
    [shiding:bin]#./test
    Hit a key, then hit return.
    F
    Uppercase letter
    [shiding:bin]#./test
    Hit a key, then hit return.
    .
    Punctuation, whitespace,or other
    [shiding:bin]#./test
    Hit a key, then hit return.
    5
    Digit
    [shiding:bin]#
    没发现有什么问题啊,没出现你上面的错误哦!

  6. lykginy 于 2011-04-07 13:40:41发表:

    引用:

    顺便问下 cat > hello << MY_PROMGRAM 是表示什么?
    牟头人 发表于 2011-4-7 10:46

    输入输出重定向
    输入到hello文件 以MY_PROMGRAM为输入结束

  7. lykginy 于 2011-04-07 13:37:20发表:

    我直接拷过来没问啊[code]lykling@LYK:~/test/shell$ sh case2.sh
    Hit a key, then hit return.
    e
    Lowercase letter
    lykling@LYK:~/test/shell$ sh case2.sh
    Hit a key, then hit return.
    3
    Digit
    lykling@LYK:~/test/shell$ sh case2.sh
    Hit a key, then hit return.
    G
    Uppercase letter
    lykling@LYK:~/test/shell$ sh case2.sh
    Hit a key, then hit return.
    '
    Punctuation, whitespace,or other
    [/code]