2012-03-04 112 views
3

我想在我的bash脚本中解析传入选项,并将值保存在变量中。 这是我的代码:变量赋值在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

;; 我不得不删除第一个$,它的工作原理 – 2015-11-18 15:36:47

+0

我的错误是用这样的^ h的bash脚本语言)$主机= “$ OPTARG” – 2016-10-18 10:30:01

0

您还需要改变optstring - 的c选项需要遵循一个冒号,如果要收集它的参数:

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

当我创建一个脚本来练习if/then/else和case语句时,我采取了一种稍微不同的方法。顺便说一句,如果你安装cowsay;

sudo apt-get install cowsay 

and fortune;

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 
    ~ 
这就是为什么我恨:)