如何在Bash中循环If语句

如何在Bash中循环If语句,bash,loops,if-statement,prompt,Bash,Loops,If Statement,Prompt,这是我的密码: #!/bin/bash echo "Letter:" read a if [ $a = "a" ] then echo "LOL" fi if [ $a = "b" ] then echo "ROFL" fi 是否有一种方法可以让我循环使用,这样在显示LOL或ROFL后,我会再次被要求写信?是的 哦,你想知道怎么做吗 while true; do echo "Letter:" read a if [ $a = "a" ] then

这是我的密码:

#!/bin/bash
echo "Letter:"
read a
if [ $a = "a" ]
then
     echo "LOL"
fi
if [ $a = "b" ]
then
      echo "ROFL"
fi
是否有一种方法可以让我循环使用,这样在显示
LOL
ROFL
后,我会再次被要求写信?

是的

哦,你想知道怎么做吗

while true; do
  echo "Letter:"
  read a
  if [ $a = "a" ]
  then
     echo "LOL"
  elif [ $a = "b" ]
  then
      echo "ROFL"
  fi
done
当然,你可能想要一些方法来摆脱这个无限循环。在这种情况下运行的命令是
break
。我会这样写整件事:

while read -p Letter: a; do 
  case "$a" in
    a) echo LOL;;
    b) echo ROFL;;
    q) break;;
  esac
done
它允许您通过输入“q”或生成文件结尾(control-D)退出循环。

您总是想要
-r
读取标志。
该行上还有一个引用错误:

if [ $a = "a" ] # this will fail if a='*'
所以这里有一个更好的版本(我还限制用户只输入1个字符):

或使用switch语句:

#!/bin/bash
while read -rn1 -p 'Letter: ' a; do 
    echo
    case $a in
        a) echo LOL;;
        b) echo ROFL;;
        *) break;;
    esac
done
#!/bin/bash
while read -rn1 -p 'Letter: ' a; do 
    echo
    case $a in
        a) echo LOL;;
        b) echo ROFL;;
        *) break;;
    esac
done