![While 循环中嵌套的 Case 语句导致 BASH 脚本中出现无限循环](https://linux22.com/image/112285/While%20%E5%BE%AA%E7%8E%AF%E4%B8%AD%E5%B5%8C%E5%A5%97%E7%9A%84%20Case%20%E8%AF%AD%E5%8F%A5%E5%AF%BC%E8%87%B4%20BASH%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E5%87%BA%E7%8E%B0%E6%97%A0%E9%99%90%E5%BE%AA%E7%8E%AF.png)
我试图让这个 BASH 脚本要求用户输入 1 到 4 之间的值来在 case 语句中选择忍者神龟。任何其他值都将导致 $COUNTER 保持等于 0,因此需要再次执行 case 语句。但是,如果输入 1 到 4 以外的任何值,就会陷入无限循环。
第一 - 如何在 while 循环内嵌套 case 语句?
第二 - 如何使此脚本要求用户输入 1 - 4 之间的值
#!/bin/bash
echo "What is your favorite Ninja Trutle?"
echo "1 - Raphael."
echo "2 - Leonardo."
echo "3 - Michelangelo"
echo "4 - Donatello"
read TURTLE;
COUNTER=0;
while [ $COUNTER -eq 0 ]
do
$COUNTER=$(( $COUNTER + 1 ))
case $TURTLE in
1) echo "Raphael is cool, but rude.";;
2) echo "Leonardo leads.";;
3) echo "Michelangelo is a party dude.";;
4) echo "Donatello does machines.";;
*) echo "Did you even watch the show?"
$COUNTER=0
;;
esac
done
感谢您提供的任何帮助。
答案1
错误出现在您递增的行中COUNTER
。$
当您想要取消引用变量名称以获取其值时,请使用该符号。当您为变量赋值时不会使用它。这些行应为:
COUNTER=$(( $COUNTER + 1 ))
和
COUNTER=0
另外,由于该case
命令位于while
循环内,因此我假设您希望在用户输入无效值时再次提示用户。如果是这样,您也应该将该read
语句放入循环内。while