【问题标题】:Variable assignment inside a case statement (bash) [duplicate]case语句中的变量赋值(bash)[重复]
【发布时间】: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”中的语句必须是命令行命令,所以我无法进行想要的分配。这样做的正确方法是什么?

【问题讨论】:

    标签: bash command-line switch-statement


    【解决方案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
          ~   
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 2021-08-13
        • 2015-11-13
        • 2020-06-27
        • 2020-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多