Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。
可以对特定条件进行测试,并根据返回值来判断条件是否成立($?返回值为 0 表示条件成立)
[root@xiaowang ~]# a=hello
[root@xiaowang ~]# echo $a
hello
[root@xiaowang ~]# test $a = hello
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# test $a = Hello
[root@xiaowang ~]# echo $?
1
[root@xiaowang ~]# a=Hello
[root@xiaowang ~]# test $a = Hello
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# a=hello
[root@xiaowang ~]# [ $a = hello ] ###中括号左右两边有空格
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# [ $a = Hello ]
[root@xiaowang ~]# echo $?
1
[root@xiaowang ~]#
操作符 | 说明 |
---|---|
-e | 测试目录或文件是否存在(Exist) |
-d | 测试是否为目录(Directory) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有读取权限(Read) |
-w | 测试当前用户是否有写入权限(Write) |
-x | 测试是否设置有可执行权限(Excute) |
[root@xiaowang ~]# [ -f /etc/yum.repos.d/ ]
[root@xiaowang ~]# echo $?
1
[root@xiaowang ~]# [ -d /etc/yum.repos.d/ ]
[root@xiaowang ~]# echo $?
0
操作符 | 说明 |
---|---|
-eq | 等于——== |
-ne | 不等于——!= |
-gt | 大于—— \ > |
-lt | 小于—— \ < |
-le | 小于等于——≤ |
-ge | 大于等于——≥ |
[root@xiaowang ~]# [ 3 -eq 4 ]
[root@xiaowang ~]# echo $?
1
[root@xiaowang ~]# [ 3 -ne 4 ]
[root@xiaowang ~]# echo $?
0
[ 字符串1 = 字符串2 ]或[ 字符串1 == 字符串2 ]
[ 字符串1 != 字符串
[ -z 字符串 ]——检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
[ -n 字符串 ]——检查是否有字符串存在
[root@xiaowang ~]# [ abc = abc ]
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# [ abc = ABC ]
[root@xiaowang ~]# echo $?
1
[root@xiaowang ~]# [ abc != ABC ]
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# [ -n abc ]
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# [ -z abc ]
[root@xiaowang ~]# echo $?
1
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
操作符 | 说明 |
---|---|
-a或&& | 逻辑与,“而且”的意思,前后条件需都成立 |
-o或|| | 逻辑或,“或者”的意思,只需前后条件中一个成立 |
! | 逻辑否 |
[root@xiaowang ~]# a=5
[root@xiaowang ~]# [ $a -ne 1 ] && [ $a != 3 ]
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# [ $a -ne 1 -a $a != 3 ]
[root@xiaowang ~]# echo $?
0
[root@xiaowang ~]# a=5
[root@xiaowang ~]# [ $a -gt 20 ] && echo "$a<20" || echo "$a>=20"
5>=20 ###条件为假,执行或
[root@xiaowang ~]# [ $a -lt 20 ] && echo "$a<20" || echo "$a>=20"
5<20 ###条件为真,执行与
if条件测试操作
then
命令序列
fi
[root@xiaowang ~]# cat 3.sh
#!/bin/bash
read -p "请输入一个整数: " num
A=$((num % 2))
if [ $A -eq 0 ];
then
echo "这个数是偶数"
else
echo "这个数是奇数"
fi
[root@xiaowang ~]# ./3.sh
请输入一个整数: 5
这个数是奇数
[root@xiaowang ~]# ./3.sh
请输入一个整数: 4
这个数是偶数
if 条件测试操作
then
命令序列 1
else
命令序列 2
fi
[root@xiaowang ~]# cat 11.sh
#!/bin/bash
read -p "请输入一个月份数字:" A
if [ $A -ge 1 -a $A -le 6 ];then
echo "这个月份属于上半年"
elif [ $A -ge 7 -a $A -le 12 ];then
echo "这个月份属于下半年"
else
echo "输入的月份不在有效范围内"
fi
[root@xiaowang ~]# ./11.sh
请输入一个月份数字:5
这个月份属于上半年
[root@xiaowang ~]# ./11.sh
请输入一个月份数字:11
这个月份属于下半年
[root@xiaowang ~]# ./11.sh
请输入一个月份数字:13
输入的月份不在有效范围内
if 条件测试操作 1
then
命令序列 1
elif 条件测试操作 2
then
命令序列 2
[else]
[命令序列 3]
fi
[root@client ~]# cat score.sh
#!/bin/bash
read -p "请输入您的分数(1~100)" score
if [ $score -ge 85 ]&&[ $score -le 100 ];then
echo "$score分,优秀"
elif [ $score -ge 70 ]&&[ $score -le 84 ];then
echo "$score分,合格"
else
echo "$score分,不合格"
fi
[root@client ~]# bash score.sh
请输入您的分数(1~100)88
88分,优秀
[root@client ~]# bash score.sh
请输入您的分数(1~100)79
79分,合格
[root@client ~]# bash score.sh
请输入您的分数(1~100)66
66分,不合格
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
……
*)
默认命令序列
esac
① case 行尾必须为单词“in”,每一模式必须以右括号“)”结束。
② 双分号“;;”表示命令序列的结束。
③ 模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示或,如“A|B”。
④ 最后的“)”表示默认模式,其中的**相当于通配符*。
vim /etc/init.d/firewalld.sh
case $1 in
start)
echo -n "正在启动 firewalld 服务 ... "
systemctl start firewalld.service
echo "OK"
;;
stop)
echo -n "正在停止 firewalld 服务 ... "
pkill "firewalld" &> /dev/null
echo "OK"
;;
restart)
$0 stop
$0 start
;;
status)
if pgrep "firewalld" &>/dev/null ; then
echo "firewalld 服务已经启动."
else
echo "firewalld 服务已经停止."
fi
;;
* )
echo "用法: $0 {start|stop|status|restart}"
esac
[root@xiaowang ~]# cat case.sh
#!/bin/bash
read -p "请输入一个年龄:" num
case $num in
5)
echo "这是未成年人"
;;
20)
echo "这是青年人"
;;
35)
echo "这是中年人"
;;
70)
echo "这是老年人"
;;
*)
echo "这是个人"
;;
esac
[root@xiaowang ~]# sh case.sh
请输入一个年龄:5
这是未成年人
[root@xiaowang ~]# sh case.sh
请输入一个年龄:20
这是青年人
[root@xiaowang ~]# sh case.sh
请输入一个年龄:35
这是中年人
[root@xiaowang ~]# sh case.sh
请输入一个年龄:70
这是老年人
[root@xiaowang ~]# sh case.sh
请输入一个年龄:18
这是个人