目录
引言:本篇内容讲述了Shell编程条件语句的部分知识点,通过一些基础的案例向大家介绍if语句中的条件测试:文件测试、整数值比较、字符串比较、逻辑测试;以及if语句的几种类型。
一:条件测试
1.1文件测试
test命令:测试表达式是否成立,若成立返回0,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
常用的测试操作符
-d:测试是否为目录
-e:测试目录或文件是否存在
-f:测试是否为文件
-r:测试当前用户是否有权限读取
-w:测试当前用户是否有权限写入
-x:测试是否设置有可执行权限
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-s:测试存在且文件大小为空
-L:测试是否为链接文件
执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。
1.2整数值比较
格式:[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq:等于(equal)
-ne:不等于(not equal)
-gt:大于(greater than)
-lt:小于(lesser than)
-le:小于或等于(lesser or equal)
-ge:大于或等于(greater or equal)
在Shell脚本中,俩个==号为=号
1.3字符串比较
格式1:[ 字符串1 = 字符串2 ] ; [ 字符串1 != 字符串2 ]
格式2:[ -z 字符串 ]
常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,!号表示相反的 意思
-z:字符串内容为空
1.4逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
常用的测试操作符
-a 或&&:逻辑与,“而且”的意思
-o或||:逻辑或,“或者”的意思
!:逻辑否
二:if语句的结构
2.1单分支结构
if 条件测试操作
then 命令序列
fi
案例:
案例:
案例:
单个括号和双个括号的区别
单个括号( [ ] )﹔必须要有空格两个字符或数字之间的比较左右必须要有空格
条件判断: test一种形式,[ ] 中间只能使用 = 和 != 比较字符串,如果使用 < 、>需要进行转义\.然后中间如果比较数字要用 -lt 等符号,不能使用\<比较数字,它会当成字符串处理
两个括号( [ [ ] ] ) :可用于处理逻辑命令,也可以处理字符串是否相等,且使用<、>不用转义符
2.2双分支结构
if 条件测试操作
then 命令序列1
else 命令序列2
fi
案例:测试机器是否存活
案例:创建用户
案例:当前用户是否为root
案例:查看Apache服务是否启动
2.3多分支结构
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then命令序列2
else
命令序列3
fi
案例:判断文件的类别
案例:
2.4嵌套语句
例:判断httpd服务有没有启动
嵌套的过程:
判断是否启动
如果启动-----输出已启动
如果没启动-----判断是否安装---如果安装---启动
如果没安装---安装---如果安装成功---启动
如果安装不成功---报错
三:case语句结构
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
*)
默认命令序列
esac
case行尾必须为单词“in”,每一模式必须以右括号“)”结束。
双分号“;;”表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号“|”表示或
最后的“*)”表示默认模式,其中的*相当于通配符
案例:
案例:apache启动服务脚本
四:总结
在生产环境中我们编写Shell脚本需要学会条件测试的语法:文件测试、整数值比较、字符串比较、逻辑测试;以及if语句的语法的几种类型 :单分支、双分支、多分支、嵌套以及case多分支语法的使用方法。