Shell脚本------条件语句(条件测试,if语句,case语句)

Posted 下雨天的放羊娃

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本------条件语句(条件测试,if语句,case语句)相关的知识,希望对你有一定的参考价值。

一.条件测试

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0(真true)时表示成功,返回值为非0值(假false)时表示失败或异常。

1.test命令

测试表达式是否成立,若成立返回0,否则返回其他数值

格式1:  test  条件表达式
格式2: [ 条件表达式 ]        中括号两边要有空格

常用的测试操作符

测试操作符测试内容
-d测试是否为目录(Directory)
-e测试目录或文件是否存在(Exist)
-f测试是否为文件(File)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)
-x测试当前用户是否具有权限执行(eXcute)
-L测试是否为符号链接

在这里插入图片描述

2.整数值比较

[   整数1   操作符   整数2  ]

常用的测试操作符

测试操作符含义
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greater Than)
-lt小于(Lesser Than)
-ge大于或等于(Greater or Equal)
-le小于或等于(Greater or Equal)
who  |  wc  -l          					统计当前系统中的用户
[$(who | wc -l)-lt 5]&& echo "Yes"			用户数是否<5	
[$(who | wc -l)-ge 3]&& echo "ya"			用户数是否>=3

在这里插入图片描述

free  -m   #查看内存使用情况,单位为MB
Free1=$(free -m | grep "Mem:" | awk '{print $4}')	定义变量名Free1的变量值为以MB为单位显示内存情况,过滤出Mem行的内容,并且打印出第四列的内容
[ $Free1 -lt 1024 ]&& echo "当前空闲内存为${Free1}MB"   显示空闲内存是否小于1024MB,并且输出当前空闲内存的大小

在这里插入图片描述
浮点运算需要,要借助bc或awk处理

free -m     		查看当前系统的内存使用情况,以MB为单位
Total1=$(free -m | grep "Mem:" |awk '{print $2}')	定义变量名Total1的变量值为以MB为单位显示内存情况,过滤出Mem行的内容,并且打印出第二列的内容
Free1=$(free -m | grep "Mem:" |awk '{print $4}')   定义变量名Free1的变量值为以MB为单位显示内存情况,过滤出Mem行的内容,并且打印出第四列的内容
free=$(free -m |  grep "Mem:" | awk '{print $4/$2}')	
echo  $free											借助awk查看内存空闲率=空闲内存\\总内存
echo “scale=5;${Free1}/${Total1}| bc				借助bc查看内存空闲率

在这里插入图片描述

3.字符串比较

格式一: [ 字符串1  =  字符串2 ]
        [ 字符串1  != 字符串2 ]
格式二:[ -z  字符串 ]

常用的测试操作符

测试操作符含义
=字符串内容相同
!=字符串内容不同,!号表示相反的意思
-z字符串内容为空
echo $LANG     				
[ $LANG = "zh_CN.UTF-8"]&& echo "Yes"			测试当前语言环境,是中文时显示yes
[ $LANG != "en.US"]&& echo "Yes"				测试当前语言环境,不是英文是时显示yes

在这里插入图片描述

4.逻辑测试

格式1: [  表达式1  ] 操作符 [  表达式2  ] ……
格式2:命令1   操作符   命令2 ……

常用的测试操作符

测试操作符含义
-a或&&逻辑与,“而且”的意思
-o或‖逻辑或,“或者”的意思
逻辑否
((4>5))&& echo yes || echo no				"4>5"成立时输出yes,不成立则显示no
no
((4<5))&& echo yes  || echo no 				"4<5"成立时输出yes,不成立则显示no
yes
多个||间是或者的意思,成立一个即可。

在这里插入图片描述

[ 4 -lt 5 ] && echo yes  || echo no		"4<5"成立时,显示yes,||是或者的意思,成立一个即可		
yes
[ 4 -gt 5 ] || echo yes && echo no		"4>5"不成立,就会显示yes和no
yes
no
[ 4 -lt 5 ] || echo yes && echo no		"4<5"成立时,显示no
no

在这里插入图片描述

vim ping.sh

#!/bin/bash
ping -c 3 -i 0.5 -W 2 $1 &> /dev/null && echo "$1 online"  || echo "$1 off"
-c: 发送包的个数
-i:发送包的间隔时间
-W: 超时时间
-w: 多少秒后停止ping 命令操作


sh ping.sh   192.168.121.22    运行脚本文件ping开机的主机IP地址:192.168.121.22
sh ping.sh   192.168.121.88	   运行脚本文件ping未开机的主机IP地址:192.168.121.88

在这里插入图片描述

二.if语句

1.单分支结构

if   条件测试操作						if  已用磁盘空间>7%										
	then   命令序列				    	then 磁盘空间不足
fi									fi

在这里插入图片描述

zrg=`df  | grep "dev/sda1" | awk ‘{print $2}’ `		
sy=`df   | grep "dev/sda1" | awk '{print $3}' `
USE=`awk "BEGIN {print $sy/$zrg*100}" | awk -F '.' '{print $1}'`
if [USE -ge 25]
	>then
> echo "警告,磁盘空间不足!"
fi 

在这里插入图片描述

2.双分支结构

if  条件测试操作											if 80端口是否在监听
 	then 命令序列1											then 网站服务已在运行
 	else 命令序列2											else 启动httpd服务
fi														fi

在这里插入图片描述

vim  http.sh

#!/bin/bash

netstat -natup  |grep ":80"							查看当前系统中的80端口是否在监听
if [ $? -eq 0 ]
then
	echo “网站服务已经在运行。”
else
	echo“启动httpd服务”
	yum -y install httpd > /dev/null				安装httpd服务
	systemctl start httpd							启动httpd服务
fi
 
sh http.sh                                          运行脚本

在这里插入图片描述

3.多分支结构

if  条件测试操作1														if 分数为90~100之间
  then 命令序列1															then 判为优秀
eilf  条件测试操作2													elif 分数在60~89之间
  then 命令序列2															then 判为合格
else 																else
	命令序列3																判为不合格
fi																	fi

在这里插入图片描述

vim  chj.sh

#!/bin/bash

read -p "输入你的分数:" chj
if  [ $chj -ge  90 ] && [ $chj  -le 100]
then
	echo "优秀"
elif [ $chj -ge  60 ] && [ $chj   -lt 90]
then
	echo "合格"
else 
	echo “不及格”
fi

sh  shj.sh

在这里插入图片描述

三.case语句

case 变量值 in										case  分数 in

模式1)												90~100)
	命令序列1												判为优秀
	;;													;;
模式2)												60-89)
	命令序列2												判为合格
	;;													;;
	……													……
**)
	默认命令序列											判为不合格
esac												esac

在这里插入图片描述

Vim  chj2.sh

#!/bin/bash
read -p "请输入你的分数:" chenj
[[ $chenj -ge 90 && $chenj -le 100 ]] &&  a="A"
[[ $chenj -ge 60 && $chenj -lt 90 ]] &&  a="B"
[[ $chenj -ge 0 && $chenj -lt 60 ]] &&  a="C"

case $a in
A)
	echo "$A分,优秀!"
	;;
B)
	echo "$B分,合格!"
	;;
C)
	echo "$C分,不合格!"
	;;
*echo “输入有误!”
esac
	

在这里插入图片描述

以上是关于Shell脚本------条件语句(条件测试,if语句,case语句)的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本之条件语句

Shell脚本的条件测试和if条件语句使用

shell脚本之if条件测试语句

Shell脚本------条件语句(条件测试,if语句,case语句)

Shell脚本之条件语句

Shell脚本——条件语句