前言
通过正确使用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就显示小白
- 空字符
- read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据
二、逻辑测试
逻辑测试格式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语句
(一)、if单分支语句
单分支结构(基本格式): if 条件测试操作 then 命令序列 fi
单分支结构(举例):
if 磁盘已用空间>80%
then 报警
fi
(二)、if双分支语句
双分支结构(基本格式): if 条件测试操作 then 命令序列1 else 命令序列2 fi
双分支结构(举例):
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi
(三)、if多分支语句
多分支结构(基本格式): if 条件测试操作1 then 命令序列1 elif 条件测试操作2 then 命令序列2 else 命令序列3 fi
多分支结构(举例):
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
else
判为不合格
fi
(四)、if语句实操演示
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
(五)、case语句实操:
判断分数是否及格
[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
输入有误!
|