Bash脚本中的多个If语句

时间:2013-12-27 03:53:49

标签: bash if-statement scripting raspberry-pi

我正在尝试使用基于输入的输出创建一个bash脚本。 我的代码如下所示:

#!/bin/bash  
echo "Letter:"
read a
if a=3
then 
        echo "LOL"
fi
if a=4
then
        echo "ROFL"
fi

但是当我输入3或4时,我同时获得LOLROFL。 有没有办法让我获得3 LOL和4 ROFL? 对不起,如果我使用不正确的术语和内容,我是新手来编写脚本。

3 个答案:

答案 0 :(得分:3)

bash中,a=3是一项任务,而非测试。使用,例如:

if [ "$a" = 3 ]

[...]内,等号测试字符串(字符)相等。如果您想要测试数值,请使用'-eq`,如:

if [ "$a" -eq 3 ]

a为空时,上面“$ a”的引号是必要的,以避免出现“操作员”错误。

bash还提供以[[开头并具有不同格式的条件表达式。许多人更喜欢[[格式(例如,它避免了上面提到的引用问题)但成本却失去了与其他shell的兼容性。特别要注意的是dash,它是Debian派生发行版下脚本的默认shell(/bin/sh),没有[[

答案 1 :(得分:2)

Bash认为你试图通过说a=3分配变量。您可以执行以下操作来解决此问题:

  • 在使用=引用变量时使用$运算符,如下所示:if [[ $a = 3 ]]

  • 使用-eq运算符,该运算符非常特殊,不需要您使用$引用变量,但可能与所有sh派生的shell兼容if [[ a -eq 3 ]]。如果您希望在没有Bash的情况下使用-eq引用变量:if [[ $a -eq 3 ]]

注意

双方括号[[ ... ]]是具有特定Bash条件的首选格式。 [ ... ]适用于任何sh派生的shell(zshtcsh等)。

答案 2 :(得分:2)

if a=3会将值3分配给变量a 除非a是只读变量,否则if a=3始终返回TRUE 同样适用于if a=4

要将变量a与值进行比较,您可以执行此操作if [ $a = 3 ] 所以脚本应该改为

#!/bin/bash
echo "Letter:"
read a
if [ $a = 3 ]
then
        echo "LOL"
fi
if [ $a = 4 ]
then
        echo "ROFL"
fi

由于从用户输入读取a,因此可能存在用户密钥:

  1. 非数值
  2. 包含空格的字符串
  3. 没有,用户可以按Enter键
  4. 所以更安全的检查方法是:

    if [ "x$a" = "x3" ]