Bourne Shell中的数组和列表

时间:2011-09-16 05:17:27

标签: bash shell scripting sh

我有代码

read input
case "$input" in
    "list"* )
        blah
        ;;

    "display"* )
        blah
        ;;

    "identify"* )
        blah
        ;;

    "rules"* )
        perl image.pl $input[1]
        ;;

    "quit" )
        echo "Goodbye!"
        ;;

    * )
        echo -n "Error, invalid command. "
        ;;

esac    

我正在试图弄清楚如何将$ input的值传递给image.pl而不在输入中包含字符串“rules”。

即,如果用户输入'rules -h',我只想将'-h'传递给image.pl。

与我的其他情况一样,我想进行特异性测试,如果在输入中传递了任何其他参数,例如'quit'我想测试一个用户是否说'退出x'并抛出一个'quit'不接受任何其他“参数”的特定错误。

感谢。

2 个答案:

答案 0 :(得分:4)

假设您使用Bourne shell作为标题指定:

read input
set -- $input
case "$1" in
   list)
      blah
      ;;

    rules)
      perl image.pl "$2"
      ;;
esac

答案 1 :(得分:1)

您可以使用$input变量在bash中初始化数组,这是代码:

read input
declare -a arr=($input)
case "${arr[0]}" in
    "list")
        blah
        ;;
    "display")
        blah
        ;;
    "identify")
        blah
        ;;
    "rules")
        shift
        perl image.pl ${arr[1]}
        ;;
    "quit")
        echo "Goodbye!"
        ;;
    *)
        echo -n "Error, invalid command. "
        ;;
esac