一、Shell条件语句
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真 true)时表示成功,返回值为非0值(假 false)时表示失败或异常。
test 命令
更多操作可使用 man test 查看
1.条件表达式测试
[ 条件表达式 ]
[root@localhost1 ~]#[ 1 = 1 ]
[root@localhost1 ~]#echo $?
0
[root@localhost1 ~]#[ 1 > 10 ]
[root@localhost1 ~]#echo $?
1
2.文件测试
[ 操作符 文件或目录 ]
//测试 /root 是否是一个目录
[root@localhost1 ~]#test -d /root/
[root@localhost1 ~]#echo $?
0 --是
//测试 /root 是否是一个文件
[root@localhost1 ~]#[ -f /root/ ]
[root@localhost1 ~]#echo $?
1 --否
3.整数值比较
[ 整数或变量 操作符 整数或变量 ]
[root@localhost1 ~]#a=10
[root@localhost1 ~]#b=20
//测试 $a 是否等于10
[root@localhost1 ~]#test $a -eq 10
[root@localhost1 ~]#echo $?
0
//测试 $a 是否大于 $b
[root@localhost1 ~]#test $a -gt $b
[root@localhost1 ~]#echo $?
1
4.字符串比较
[字符串1 操作符 字符串2]
as[root@localhost1 ~]#echo $LANG
zh_CN.UTF-8
//判断 $LANG 是否为 us.en
[root@localhost1 ~]#[ $LANG = "us.en" ]
[root@localhost1 ~]#echo $?
1
5.逻辑测试
[ 表达式1 ] 操作符 [ 表达式2 ]
[root@localhost1 ~]#a=1
[root@localhost1 ~]#b=1
//逻辑与,两条命令均执行成功才返回0
[root@localhost1 ~]#[ $a = 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0
//逻辑或,其一为真则返回0
[root@localhost1 ~]#[ $a > 1 ] || [ $a = $b ]
[root@localhost1 ~]#echo $?
0
特殊用法:&& 与 || 一起使用(逻辑与执行返回状态为否,则继续执行逻辑或后的命令)
//创建文件1.txt
[root@localhost1 data]#touch 1.txt
[root@localhost1 data]#ls
1.txt
//判断1.txt 是否是目录,逻辑与返回状态为否,继续执行逻辑或后的命令
[root@localhost1 data]#[ -d 1.txt ] && echo "1.txt 是目录" || echo "1.txt 不是目录"
1.txt 不是目录
二、if 条件语句(串行执行)
(1)单分支结构
if [ 条件表达式 ];than
执行命令行 (当条件判断成立)
fi
//判断3是否大于2
[root@localhost1 ~]#vim test1.sh
#!/bin/bash
if [ 3 -ge 2 ]; then
echo "yes"
fi
[root@localhost1 ~]#bash test1.sh
yes
(2)双分支结构
if [ 条件表达式 ];than
执行命令行 (当条件判断成立)
else
执行命令行 (当条件判断不成立)
fi
(3)多分支结构
if [ 条件表达式1 ];than
执行命令行 (当条件判断1成立)
elif [ 条件表达式2 ];than – 可以有多个elif 判断语句
执行命令行 (当条件判断2成立)
else
执行命令行 (当条件判断都不成立)
fi
//判断年龄满足大于等于18的购买成人票,不满足购买学生票
[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 18 ];then
echo "请购买成人票(80元)"
else
echo "请购买学生票(40元)"
fi
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:20
请购买成人票(80元)
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:8
请购买学生票(40元)
(3)多分支结构
if [ 条件表达式1 ];than
执行命令行 (当条件判断1成立)
elif [ 条件表达式2 ];than – 可以有多个elif 判断语句
执行命令行 (当条件判断2成立)
else
执行命令行 (当条件判断都不成立)
fi
[root@localhost1 ~]#vim test2.sh
#!/bin/bash
read -p "请输入您的年龄:" age
if [ $age -ge 60 ];then
echo "请购买老人票(20元)"
elif [ $age -gt 18 ] && [ $age -lt 60 ];then
echo "请购买成人票(80元)"
elif [ $age -ge 6 ] && [ $age -lt 18 ];then
echo "请购买学生票(40元)"
else
echo "请购买儿童票(20元)"
fi
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:70
请购买老人票(20元)
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:23
请购买成人票(80元)
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:14
请购买学生票(40元)
[root@localhost1 ~]#bash test2.sh
请输入您的年龄:3
请购买儿童票(20元)
三、case语句(并行执行)
case 变量名 in
模式1) – 指定模式可以有多个(支持通配符)
命令序列
;;
模式2)
命令序列
;;
*) – 默认模式(除上述指定模式的其他情况)
默认命令序列
;;
esac
[root@localhost1 ~]#vim test3.sh
#!/bin/bash
read -p "请输入你的分数(0~100):" num
case $num in
100)
echo "满分!"
;;
9[0-9])
echo "优秀!"
;;
[78][0-9])
echo "良好!"
;;
6[0-9])
echo "合格!"
;;
[0-9]|[1-5][0-9])
echo "不及格!"
;;
*)
echo "输入有误,请输入 0~100 的范围!"
esac
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):100
满分!
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):97
优秀!
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):78
良好!
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):62
合格!
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):45
不及格!
[root@localhost1 ~]#bash test3.sh
请输入你的分数(0~100):123
输入有误,请输入 0~100 的范围!