欢迎,来自IP地址为:3.15.221.67 的朋友


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 表达式”

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注