2012-03-04 3 views
3

Я пытаюсь проанализировать входящие параметры в моем сценарии bash и сохранить значения в переменных. Это мой код:Переменная назначения внутри case case (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 

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

ответ

8

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

case "$flag" in 
    H) host="$OPTARG" ;; 
    w) warning="$OPTARG" ;; 
    c) critical="$OPTARG" ;; 
esac 
+0

Вот почему я ненавижу Баш скриптовый язык :) –

+0

моя ошибка, используя как этот H) $ хост = «$ Optarg» ;; Мне пришлось удалить первый $, и он работает –

0

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

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

При создании скрипта я использовал несколько иной подход, если/then/else и case case. BTW, если вы устанавливаете cowsay;

sudo apt-get install cowsay 

and fortune;

sudo apt-get install fortune 

вы можете использовать этот скрипт как и затем поиграйте с ним, чтобы привыкнуть к выполнению заданий в случае, если заявлении или с помощью 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 
    ~