【问题标题】:Bash script error using while and case使用 while 和 case 的 Bash 脚本错误
【发布时间】:2017-04-07 19:03:36
【问题描述】:

第一次在这里提问,还在学习 bash,请多多包涵。

我使用 while 和 case 制作了一个主屏幕,它应该可以工作,但它不是,我不知道我在哪里犯了错误。


while [ $WH!=5 ]
do

echo "Choice menu:"
echo "          1) Option 1"
echo "          2) Option 2"
echo "          3) Option 3"
echo "          4) Option 4"
echo "          5) End script"
echo -n "Choose an option: "
read $OP

case $OP in
        1)
            # code;;

        2)
            # more code;;

        3)
            # more code;;

        4)
            # even more code;;

        5)
            echo "Thank you for testing this script!"
            $WH=5;;
esac
done

无论我在$OP 中输入什么,脚本都会不断重复选择菜单,直到我取消它。我尝试移动 while 并使用$OP 作为条件,但似乎没有任何效果。

【问题讨论】:

  • 必须是read OP,而不是read $OP
  • while 条件也不正确(!= 周围需要空格)-shellcheck.net 会告诉你类似的事情。
  • 这可能会有所帮助:How to debug a bash script?
  • 顺便看看select 语句来构建这样的简单菜单。
  • $WH=5 替换为WH=5,将!" 替换为"!,将read $OP 替换为read OP

标签: bash centos5


【解决方案1】:

您的脚本中有多个问题:-

  1. while 构造必须是 while [ "$WH" != 5 ]。请记住将所有 shell 变量都用双引号引起来。
  2. read 命令应该是read OP
  3. case 结构至少需要一行以;; 结尾
  4. 最后的赋值语句应该是WH=5 而不是$WH=5

使用https://www.shellcheck.net 调试此类琐碎问题。

【讨论】:

  • 一些通用规则:使用$获取变量的值,设置它们的值;在变量引用周围使用双引号("$WH" 而不是$WH);并且空格在 shell 中很重要(例如在!= 附近)。哦,还有一点:最好使用小写的变量名,避免与对 shell 和/或其他程序有特殊含义的变量发生冲突(这些都是大写)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2021-12-02
  • 2012-09-08
相关资源
最近更新 更多