case语句中的变量赋值(bash)[重复]

Posted

技术标签:

【中文标题】case语句中的变量赋值(bash)[重复]【英文标题】:Variable assignment inside a case statement (bash) [duplicate] 【发布时间】:2012-03-22 07:50:45 【问题描述】:

我正在尝试解析 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”中的语句必须是命令行命令,所以我无法进行想要的分配。这样做的正确方法是什么?

【问题讨论】:

【参考方案1】:

删除= 运算符周围的空格:

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

【讨论】:

这就是我讨厌 bash 脚本语言的原因 :) 我的错误是这样使用 H) $host="$OPTARG" ;;我必须删除第一个 $ 并且它有效【参考方案2】:

您还需要更改 optstring - 如果您想收集其参数,c 选项需要后跟一个冒号:

while getopts "H:w:c:" flag

【讨论】:

【参考方案3】:

在创建脚本来练习 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
    ~   

【讨论】:

以上是关于case语句中的变量赋值(bash)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python赋值是啥?

switch-case语句中的多个变量[重复]

为啥不能用赋值语句将一个字符串常量直接赋给一个字符数组

C语言程序设计 指针变量赋值

VB中怎样把sql语句的查询结果赋值给一个变量

select 查询变量