Присвоение переменной внутри оператора case (bash) - PullRequest
3 голосов
/ 04 марта 2012

Я пытаюсь проанализировать входящие параметры в моем скрипте bash и сохранить значения в переменных. Это мой код:

#!/bin/bash 

while getopts "H:w:c" flag
do 
#  echo $flag $OPTIND $OPTARG
    case $flag in
    H) host = "$OPTARG"
    ;;
    w) warning = "$OPTARG"
    ;;
    c) critical = "$OPTARG"
    ;;
    esac
done

Однако операторы внутри case должны быть командами командной строки, поэтому я не могу сделать желаемое назначение. Как правильно это сделать?

Ответы [ 3 ]

9 голосов
/ 04 марта 2012

Удалить пробелы вокруг = операторов:

case "$flag" in
  H) host="$OPTARG" ;;
  w) warning="$OPTARG" ;;
  c) critical="$OPTARG" ;;
esac
0 голосов
/ 08 июня 2016

Я использовал немного другой подход при создании сценария, чтобы попрактиковаться в выражениях if / then / else и case. Кстати, если вы установите cowsay;

    sudo apt-get install cowsay

и состояние;

    sudo apt-get install fortune

вы можете использовать этот скрипт как есть, а затем поиграть с ним, чтобы привыкнуть к выполнению присваиваний в операторах case или в использовании операторов if / then / else.

    #!/bin/bash
    echo "Choose a character from the following list:"
    echo
    echo "1) Beavis"
    echo "2) Cow Hitting a Bong"
    echo "3) Calvin"
    echo "4) Daemon"
    echo "5) Dragon and Cow"
    echo "6) Ghostbusters"
    echo "7) Ren"
    echo "8) Stimpy"
    echo "9) Sodomized Sheep"
    echo "0) Mech and Cow"
    #
    echo
    read character
    echo
    #
    case "$character" in
      "1") file="beavis.zen.cow" ;;
      "2") file="bong.cow" ;;
      "3") file="calvin.cow" ;;
      "4") file="daemon.cow" ;;
      "5") file="dragon-and-cow.cow" ;;
      "6") file="ghostbusters.cow" ;;
      "7") file="ren.cow" ;;
      "8") file="stimpy.cow" ;;
      "9") file="sodomized-sheep.cow" ;;
      "0") file="mech-and-cow.cow" ;;
      *) clear; ./cowsay.sh;
    esac
      #
    #echo "var 'file' == $file"
    echo "What would you like your character to say?"
    echo "Alternatively, if you want your character to"
    echo "read you your fortune, type 'fortune'."
    read input_string
    #
    if [ $input_string = fortune ] ; then
      clear; $input_string | cowsay -f /usr/share/cowsay/cows/$file
    else
      clear; cowsay -f /usr/share/cowsay/cows/$file $input_string
    fi
    ~   
0 голосов
/ 05 марта 2012

Вам также нужно изменить строку опций - за параметром c следует двоеточие, если вы хотите собрать его аргумент:

while getopts "H:w:c:" flag
...