Массивы и списки в Bourne Shell - PullRequest
       11

Массивы и списки в Bourne Shell

0 голосов
/ 16 сентября 2011

У меня есть код

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.

Аналогично другим моим случаям, я хотел бы проверить специфичность, есливо входные данные были переданы любые другие аргументы, например, для «выхода» я хотел бы проверить, сказал ли пользователь «выйти из х» и выдать конкретную ошибку, что «выход» не принимает никаких других «аргументов».

Спасибо.

Ответы [ 2 ]

4 голосов
/ 16 сентября 2011

Если вы используете оболочку Bourne в качестве заголовка, укажите:

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

    rules)
      perl image.pl "$2"
      ;;
esac
1 голос
/ 16 сентября 2011

Вы можете использовать переменную $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 
...