Bash if string = this or that

bsm*_*moo 5 linux bash shell ubuntu if-statement

试图编写一个脚本来读取用户输入的内容......我知道这是基本的但我坚持第一个如果......

echo  "Please enter yes or no (y/n)?"
read string
if [ $string = "y" -o "n" ]
   then
      echo "User selected $string"
   else
      echo "You didn't enter y/n !!!"
fi
Run Code Online (Sandbox Code Playgroud)

如果 [ $backup = "y" 或 "n" ]

有任何想法吗?

Hal*_*oum 5

在 中使用此语法bash

if [ "a string" = "another one" ] ; then

# Whatever

fi
Run Code Online (Sandbox Code Playgroud)

对于多个条件语句,例如OR,请使用:

if [ "a string" = "another one" ] || [ "$foo" = "bar" ] ; then

# Whatever

fi
Run Code Online (Sandbox Code Playgroud)

bash还支持非标准[[ ... ]]表达式,它可以使用单个命令而不是 2 个[命令处理复合比较:

if [[ "a string" = "another one" || $foo = "bar" ]]; then

# Whatever

fi
Run Code Online (Sandbox Code Playgroud)


Wil*_*iam 4

不是您实际问的问题,但是...您告诉用户输入“是”或“否”,但仅测试 y 或 n - 当然,您给了他们提示,但用户对提示有抵抗力。因此,也许需要进行更宽松的测试:

echo "Please enter yes or no (y/n)"
read string
case "$string" in
    [yY]* | [nN]*) echo "User entered $string" ;;
    *) echo "I don't understand '$string'" ;;
esac
Run Code Online (Sandbox Code Playgroud)

这将识别以 Y 或 N 开头的任何变化 - 通常这已经足够好了,但您可以收紧测试。另外,由于您可能想要做一些不同的事情,回答是或否,您可以扩展案例(我还加强了这一测试):

case "$string" in
    [yY] | [yY][eE][sS]) echo "Here's where you process yes" ;;
    [nN] | [nN][oO]) echo "And here you deal with no" ;;
    *) echo "I don't understand '$string'" ;;
esac
Run Code Online (Sandbox Code Playgroud)

您可以使用 if 语句来执行此操作,但我发现当可能有两个以上的替代方案并且测试适合 case 语法时, case 更具可读性。