shell编程之条件语句

天下之事常成于困约,而败于奢靡。这篇文章主要讲述shell编程之条件语句相关的知识,希望能为你提供帮助。
条件语句 测试表达式是否成立

test命令;格式1 [ 条件表达式 ];格式2

如果成功返回0,如果失败则返回其他数值
格式1:test操作符表达式 举例: test -d /etc/sysconfig; 测试是否为目录 echo $? 0; (返回值)

文件测试:
[ 操作符文件或者目录 ]
举例: [ 操作符号 条件表达式 ] [ -d /etc/sysconfig ] echo$? 0; (返回值) 0表示这个的确是目录

1、常用的测试操作符:
-d ;测试是否为目录
-e:测试目录或者文件是否存在(首选用-e)
-a:测试目录或者文件是否存在(不建议使用-a)
-f:测试对象是否为文件(同样可以判断这个文件是否存在)
-r:测试当前用户是否有权限去读取
-w:测试当前用户是否有权限去写入
-x:测试当前用户是否有权限去执行
-L:测试是否为软连接文件
2、属性测试补充:
-sFILE #是否存在非空
-tfd#fd 文件描述是否在某终端已经打开过
-N FILE #文件自从上一次被读取后是否被人修改过
-O FILE #当前有效用户是否为文件属主
-G FILE #当前有效用户是否为文件属组
整数值比较
[ 整数1 操作符 整数2 ]
举例: 1、[ 1 -eq 1 ] echo $? 0 (返回值)2、[ 1 -lt 2 ] echo $? 0 (返回值)3、[ 10 -gt 20 ] echo $? 1 (返回值)

!!常用的测试操作符:
-eq :等于或者==-ne :不等于或者!=-gt :大于或者\\> -lt :小于或者\\< -le :小于或者等于-ge :大于或者等于

举例:
计算内存已使用情况 used=$(free | grep "Mem:" | awk print $3); 已使用量 total=$(free | grep "Mem:" | awk print $2); 总计用量 used_pre=$(echo "scale=2; $used/$total*100"|bc|awk -F. print $1); 计算占用率 [ $used_pre -gt 25 ] & & echo "使用率过高,当前使用率为:$used_pre"; 判断内存使用情况并发出报警

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

常用的测试操作符:
=:字符串内容相同
!=: 字符串内容不同,!表示相反的意思
【shell编程之条件语句】-z : 字符串内容是否为空,对于未定义或者赋予空值的变量将视为空串
拓展:
[ -n 字符串 ] : 判断字符串是否存在,与-z正好相反。记得使用" " 直接引用才行哦
逻辑测试
格式1: [表达式1]操作符[表达式2]:通常用& & ||格式2: [ 命令1 操作符 命令2 ]:通常用-a-o

常见条件:
1、逻辑且(表示为" 而且" )
-a或者 & &

2、逻辑或(表示为" 或者" )
-o 或者 ||

3、逻辑否定

拓展:
1、逻辑且,是左边先成立,才会继续执行右边xxx & & bbb
2、逻辑或,是左边如果不成立,则执行右边命令(如果左边成立了,那么右边就不再会继续执行了)xxx || bbb
shell编程之条件语句

文章图片

#!/bin/bash #使用三元运算符来写ping主机的脚本 ping -c 3 -i 0.5 -w 2 $1 & > /dev/null & & echo "$1 在线" || echo "$1 不在线"

if语句
1、单分支结构
if条件测试操作 then命令序列 fi; 标准格式结尾

shell编程之条件语句

文章图片

2、双分支结构
if条件测试操作 then命令序列1 else命令序列2 fi; 标准格式结尾

shell编程之条件语句

文章图片

3、多分支
if判断条件1 then条件1为真的代码 elif判断条件2 then条件2为真的代码 ...... else其他所有结果,当上面的判断都失败后采用(else可选:可加或者不加) fi; 标准格式结尾

shell编程之条件语句

文章图片
case语句结构
case支持glob风格的通配符*任意长度任意字符?任意单个字符[0-9]指定范围内的任意单个字符|; 或者 举例:a|b a或者b

1、case多分支结构
case变量值in 模式1) 分支1 ; ; 模式2) 分支2 ; ; ...... *) 默认命令,以上分支都除外的情况下采用{此外, "*)"不是必须的,可有可无的选项 } esac

shell编程之条件语句

文章图片

拓展练习1、if的条件语句来ping主机是否在线
#!/bin/bashping -c 3 -i 0.5 -w 2 $1 & > /dev/null #ping位置参数$1,发送三个包,间隔0.5秒,设置2秒的超时,所有导出结果丢进黑洞if [ $? -eq 0 ] then echo "$1 在线" else echo "$1 不在线" fi #通过判断$?返回的结果值来确定ping的主机在不在线,0为正确在线,返回1就会else不在线

2、查询httpd服务是否开启
#!/bin/bash netstat -napt | grep :80 & > /dev/null #查询80端口是否开启,并把输出结果丢进黑洞if [ $? -eq 0 ] then echo "httpd服务已经运行" else rpm -q httpd & > /dev/null if [ $? -eq 0 ] then echo "httpd服务已经安装,准备开启服务" systemctl start httpd else echo "正在安装httpd服务,并准备启动改服务" df | grep "/dev/sr0" & > /dev/null if [ $? -eq 0 ] then yum install -y httpd & > /dev/null sysytemctl start httpd else mount /dev/cdrom /mnt & > /dev/null yum install -y httpd & > /dev/null sysytemctl start httpd fi fi fi


    推荐阅读