这期教程,我们来从简单到复杂,详细介绍 if 语句的使用方法。
1. if 结构
首先,最简单的结构如下所示:
if 条件判断;then
命令
fi
if 条件判断
then
命令
fi
这两种格式是等价的,只是then的位置不同。逻辑是当条件判断的值为“真”时,执行 then 后的命令,否则不执行。条件判断也可以是任意命令,以命令的退出状态码判断,为 0 则执行 then 后命令。
#!/bin/bash
name="David"
if [[ $name == "David" ]];then
echo "Bingo"
echo 1
fi
if ((1+1==3));then
echo "Great"
fi
if now=$(date);then
echo $now
fi
echo "finish"
[root@server ~]# sh if.sh
Bingo
1
2022年 03月 02日 星期三 15:07:10 CST
finish
在这个例子中,变量 name 的值是 David,所以判断为“真”,打印了Bingo和 1。但是1加1不等于3,第二个if中的条件判断为“假”,不打印Great。把 date 命令的结果赋值给变量 now,这个命令没有执行错误,所以返回值为 0 ,打印 now 的值。
2. if-else 结构
这个结构比上一个结构多了一层逻辑。在 if 结构中,如果判断为假,则什么都不做。if-else 结构在判断为“真”时执行then后面的命令1,在判断为“假”时执行else后面的命令2:
if 条件判断;then
命令1
else
命令2
fi
if 条件判断
then
命令1
else
命令2
fi
[root@server ~]# cat if-else.sh
#!/bin/bash
name="David"
if [[ $name != "David" ]];then
echo "Bingo"
else
echo "Great"
fi
[root@server ~]# sh if-else.sh
Great
3. if-elif-else 结构
这个结构比上一个结构又多了一层逻辑。这个结构在判断为“真”时执行 then 后面的命令1,在判断为“假”时继续判断 elif ,如果为“真”,执行命令2,如果为假,执行 else 后的命令3。
if 条件判断
then
命令1
elif 条件判断
then
命令2
else
命令3
fi
这里的 then 也是可以写到条件判断后边接在分号后边的。还要注意 elif 可以写任意个,这里只是最简格式。
[root@server ~]# cat if-elif-else.sh
#!/bin/bash
name="David"
if [[ $name != "David" ]]
then
echo "Bingo"
elif date;
then
echo "OK"
elif ((2**3<9))
then
echo "terrific"
else
echo "Great"
fi
[root@server ~]# sh if-elif-else.sh
2022年 03月 02日 星期三 16:43:20 CST
OK
4. 条件判断的格式
请看shell 编程教程(5)括号的妙用()[]{}_yspg_217的博客-CSDN博客
5. case 语句
case 语句可以检查一个变量的多个值,可以代替多层的 if-elif-else 结构使用。
case 变量名 in
模式1)
命令1;;
模式2)
命令2;;
...
*)
默认命令;;
esac
其中模式可以是字符串,也可以包含通配符,一个模式的位置可以包含多个模式,用逻辑或(|)连接。
[root@server ~]# cat case.sh
#!/bin/bash
a=David
case $a in
D*|"David")
echo D;;
A*)
echo A;;
*)
echo no matching;;
esac
[root@server ~]# sh case.sh
D