欢迎,来自IP地址为:18.97.9.173 的朋友
Bash 脚本同样支持分支结构,使用 if-else 表达式即可。
使用 if-else 表达式,可以为脚本添加逻辑条件分支。
标准 if-else 表达式语法如下所示:
if [ expression ]; then ## execute this block if condition is true else go to next elif [ expression ]; then ## execute this block if condition is true else go to next else ## if none of the above conditions are true, execute this block fi
需要注意的是:
- elif 指代的是”else if”,代表不同的条件分支
- 所有的 if else 表达式最后由 fi 结束
- 测试条件需要使用分号”;”和”then”关键字
在演示条件表达式之前,我们需要首先了解 Bash 中的比较运算(也就是测试条件)。
测试条件
以下是数字比较的测试条件:
条件 | 返回真值意义 |
---|---|
$a -lt $b | $a < $b ($a is less than $b) |
$a -gt $b | $a >$b ($a is greater than $b) |
$a -le $b | $a >$a <= $b ($a is less or equal than $b) |
$a -ge $b | $a >= $b ($a is greater or equal than $b) |
$a -eq $b | $a is equal to $b |
$a -ne $b | $a is not equal to $b |
如果需要测试字符串,则可以使用如下测试条件:
条件 | 返回真值意义 |
---|---|
“$a” = “$b” | $a is same as $b |
“$a” == “$b” | $a is same as $b |
“$a” != “$b” | $a is different from $b |
-z “$a” | $a is empty |
文件类型测试使用如下条件:
条件 | 返回真值意义 |
---|---|
-f $a | $a is a file |
-d $a | $a is a directory |
-L $a | $a is a link |
现在,我们已经比较了解了不同的比较条件,就可以在脚本中使用分支表达式了。
Bash 使用 if 表达式
我们创建一个脚本”even.sh”,用来判断给的整数是否为偶数。脚本内容如下:
#!/usr/bin/bash read -p "Enter the number: " num mod=$(($num%2)) if [ $mod -eq 0 ]; then echo "Number $num is even" fi
这个脚本通过判断给定整是否可以被2 整除来判断是否为偶数(求余结果为0)。
需要特别注意空格。中括号”[]”同测试条件间必须有空格,同时,比较条件”-eq”的前后也必须有空格。
脚本的执行界面如下图所示:
注意上面的脚本,只有输入的数是偶数时,脚本才会有输出。如果输入数是奇数时,则不会产生任何输出,这显然不太满足要求,我们还可以优化脚本。
使用 if else 表达式
现在,在之前的脚本中添加 else 表达式,内容修改为如下:
#!/usr/bin/bash read -p "Enter the number: " num mod=$(($num%2)) if [ $mod -eq 0 ]; then echo "Number $num is even" else echo "Number $num is odd" fi
再次执行该脚本,无论是奇数还是偶数都会有信息输出了。
使用 elif 表达式
如果出现多个条件分支,可以使用”elif”来处理,每个”elif”代表一个条件,例如判断一个数是正数还是负数以及是否为0,示例脚本如下:
#!/usr/bin/bash read -p "Enter the number: " num if [ $num -lt 0 ]; then echo "Number $num is negative" elif [ $num -gt 0 ]; then echo "Number $num is positive" else echo "Number $num is zero" fi
让我们运行三次脚本来验证是否为三条件分支:
使用逻辑运算符组合多个条件
这看起来已经非常不错了,但是我们有时候会遇到同时判断多了条件的情况,通过多条件的判断来扩展判断条件的适用性。这在 Bash 里同样是支持的,可以使用逻辑与(&&)和逻辑或(||)等逻辑运算符来实现。
我们来编写一个脚本”leap.sh”,用来判断是否是润年。判断条件是如果该年可以被4整除但又不能被100整除,或者该年可以被400整除,那么该年是润年,否则为平常年。脚本内容如下:
#!/usr/bin/bash read -p "Enter the year: " year if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then echo "Year $year is leap year" else echo "Year $year is normal year" fi
注意脚本中的中括号”[]”,在使用逻辑运行符时被强制要求使用。
脚本执行结果如下图所示:
相信大家已经比较熟悉 Bash 脚本了,下一节,我们将学习在脚本中使用循环 >>Bash 基础(八):FOR WHILE UNTIL 循环<<
One thought on “Bash 基础(七):IF ELSE 表达式”