如何在Bash中循环If语句

时间:2013-12-27 15:36:43

标签: 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

有没有办法让我循环播放,以便在显示LOLROFL后,我会再次被要求回信?

2 个答案:

答案 0 :(得分:2)

哦,你想知道怎么做?

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)来退出循环。

答案 1 :(得分:1)

Don't forget 始终希望-r标记为已阅读 此行还有一个引用错误:

if [ $a = "a" ] # this will fail if a='*'

所以这里有一个更好的版本(我也限制用户只输入1个字符):

#!/bin/bash
while true; do
    read -rn1 -p 'Letter: ' a
    echo
    if [[ $a = 'a' ]]; then
        echo "LOL"
    elif [[ $a = 'b' ]]; then
        echo "ROFL"
    else
        break
    fi
done

或使用switch语句:

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