通过正确使用if语句,从而使shell脚本具备一定的“判断”能力,从而能根据不同的条件来完成不同的管理任务
通常用来检查用户输入、系统环境是否满足条件
字符串比较格式1:[ 字符串1 = 字符串2 ]
字符串比较格式2:[ 字符串1 != 字符串2 ]
[root@localhost ~]# read -p "我是好人"miao
我是好人miao #-p 后面跟提示信息,即在输入前打印提示信息
[root@localhost ~]# [ $cat = “miao” ] && echo “小白”
-bash: [: =: 期待一元表达式 #出现中文字符即报错
[root@localhost ~]# [ $miao !=“mimi” ] && echo “小白”
小白 #输入不是mimi就显示小白
逻辑测试格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
逻辑测试格式2:命令1 操作符 命令2
常用的测试操作符:
-a或&&:逻辑与,“而且”的意思,得前后条件都符合
-o或||:逻辑或,“或者” 的意思,二者其中符合一即可
!:逻辑否,只有当指定的条件不成立的时候,结果才成立
“&&”、“||”操作符能够正常存在于“[[]]”条件判断结构中,但是如果出现在“[]”结构中会报错
[root@localhost ~]# a=6 #为变量赋值
[root@localhost ~]# [ $a -ne 2 ] && [ $a -lt 8 ] #6不等于2而且6小于8
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ $a -eq 1 ] && [ $a -lt 8 ] #6等于1而且6小于8
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ $a -ne 1 -a $a -lt 8 ] #-a的用法
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ $a -ne 1 && $a -lt 8 ]] #&&的[[]]用法
[root@localhost ~]# echo $?
0
[root@localhost ~]# [[ $a -ne 1 && $a -lt 8 ]] && echo 1111
1111 #不等于1且小于8就会输出1111
单分支结构(基本格式):
if 条件测试操作
then 命令序列
fi
单分支结构(举例):
if 磁盘已用空间>80%
then 报警
fi
双分支结构(基本格式):
if 条件测试操作
then 命令序列1
else 命令序列2
fi
双分支结构(举例):
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi
多分支结构(基本格式):
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
多分支结构(举例):
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
else
判为不合格
fi
1、单分支if语句
判断大小
vim a.sh
if [ 3 -gt 2 ] #如果3大于2
then #成立的话
echo "OK" #输出OK
fi #结束
---------或者if语句可以写成-----------
if [ 3 -gt 2 ];then echo "OK"; fi
----------或者还可以写成--------------
[ 3 -gt 2 ] && echo "OK"
----------------------------------------------
[root@host ~]#sh a.sh #运行脚本
OK #输出结果
2、多分支if语句
判断成绩是否合格
vim b.sh
#!/bin/bash
read -p "请输入你的分数(0-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@host ~]#sh b.sh
请输入你的分数(0-100):90
90 分,优秀!
[root@host ~]#sh b.sh
请输入你的分数(0-100):50
50 分,不合格!
[root@host ~]#sh b.sh
请输入你的分数(0-100):80
80 分,合格!
三、case语句
(一)、case多分支语句
1、case语句的结构
针对变量额不同取值,分别执行不同的命令序列
这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句指示判断一个变量的不同取值
case行尾必须为单词“in”,每一模式必须以右括号“)”结束。
双分号“;;”表示命令序列的结束。
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示“或”,如“A|B”.
zuihou dde ")"表示默认模式,其中的相当于通配符。
格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
....
*)
默认命令序列
esac
举例:
case 分数 in
85~100)
评为优秀
;;
70~84)
评为合格
;;
....
*)
判为不合格
esac
判断分数是否及格
[root@host ~]#vim socre.sh
case NUM in
[89][0-9]|100) #这边表示的是从80分到100分,两位数的时候需要把十位和个位分开写,[89]表示十位上的8和9,[0-9]表示各位上的0-9,“|”表示或的意思。
echo "$NUM,秀儿"
;; #固定格式
[67][0-9]) #表示从60分到79分
echo "$NUM,soso"
;;
[0-5][0-9]|[0-9]) #表示0到59分 ,“|”前面的表示从00-59,后面的表示0-9.
echo "$NUM,努力"
;;
*) #表示除0-100以外的任何字符
echo "输入有误!"
esac #结束语句
[root@host ~]#chmod +x socre.sh
[root@host~]#./socre.sh
请输入你的分数:80
80,秀儿
[root@host ~]#./socre.sh
请输入你的分数:60
60,soso
[root@host ~]#./socre.sh
请输入你的分数:15
15,努力
[root@host ~]#./socre.sh
请输入你的分数:100000
输入有误!