shell脚本之条件语句(if、case)

文章目录

  • 前言
  • 一,条件测试—字符串比较
  • 二、逻辑测试
  • 三,IF语句
    • (一)、if单分支语句
    • (二)、if双分支语句
    • (三)、if多分支语句
    • (四)、if语句实操演示
    • (五)、case语句实操:

前言

通过正确使用if语句,从而使shell脚本具备一定的“判断”能力,从而能根据不同的条件来完成不同的管理任务

一,条件测试—字符串比较

通常用来检查用户输入、系统环境是否满足条件
字符串比较格式1:[ 字符串1 = 字符串2 ]

字符串比较格式2:[ 字符串1 != 字符串2 ]

  • 常用的测试操作符

shell脚本之条件语句(if、case)_第1张图片
[root@localhost ~]# read -p "我是好人"miao
我是好人miao #-p 后面跟提示信息,即在输入前打印提示信息
[root@localhost ~]# [ $cat = “miao” ] && echo “小白”
-bash: [: =: 期待一元表达式 #出现中文字符即报错
[root@localhost ~]# [ $miao !=“mimi” ] && echo “小白”
小白 #输入不是mimi就显示小白

  • 空字符
  • read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据
    shell脚本之条件语句(if、case)_第2张图片shell脚本之条件语句(if、case)_第3张图片

二、逻辑测试

逻辑测试格式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

shell脚本之条件语句(if、case)_第4张图片

(二)、if双分支语句

双分支结构(基本格式):
if 条件测试操作
then 命令序列1
else 命令序列2
fi

双分支结构(举例):
if 80端口是否在监听
	then  网站服务已在运行
	else  启动httpd服务
fi

shell脚本之条件语句(if、case)_第5张图片

(三)、if多分支语句

多分支结构(基本格式):
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi

多分支结构(举例):
if 分数为85~100之间
	then  判为优秀
elif  分数为70~84之间
	then  判为合格
else
	判为不合格
fi

shell脚本之条件语句(if、case)_第6张图片

(四)、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

shell脚本之条件语句(if、case)_第7张图片

(五)、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
输入有误!

你可能感兴趣的:(linux,运维)