前言
Shell的条件测试语句就是对条件进行判断,返回真和假,0表示真,非0表示假,和一般的编程语言相反,条件测试语句通常和if结合使用,实现不同判断结果执行不同操作的目的。
条件测试操作
text命令
使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立
格式一:text 条件表达式
格式二:[ 条件表达式 ] (注意条件表达式两边必须要有空格)
文件测试与整数测试
文件测试
格式一:text 操作符 表达式
格式二:[ 操作符 表达式 ]
常用的操作符
| 操作符 | 说明 |
|---|---|
| -d | 测试是否为目录,且测试该文件是否存在(Directory) |
| -f | 测试目录或文件是否存在,是否为普通文件(Exist) |
| -e | 测试是否为为文件且测试该文件是否存在(File) |
| -x | 测试当前用户是否有执行权限(eXcute) |
| -r | 测试当前用户是否有权限读取(Read) |
| -w | 测试当前用户是否有权限写入(Write) |
整数测试
格式一:[ 整数变量一 操作符 整数变量二 ]
格式二:test 整数变量1 操作符 整数变量2
操作符
| 操作符 | 说明 |
|---|---|
| -eq | 等于(Equal) |
| -ne | 不等于(Not Equal) |
| -gt | 大于(Greter Than) |
| -lt | 小于(Lesser Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
字符串测试
格式:
[ "字符串1" = "字符串2" ]
[ "字符串1" != "字符串2” ]
[ -z "字符串" ]
[ -n "字符串" ]
(使用-z或-n测试变量时,变量需要加引号,避免有歧义而导致判断结果有误)
常用测试操作符
| 操作符 | 说明 |
|---|---|
| = | 字符串内容相同 |
| != | 字符串内容不同,!表示取反的意思 |
| -z | 测试字符串是否为空,或者指定的变量是否为空值 |
| -n | 测试字符串是否存在,即是否不为空 |
逻辑测试
逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。
格式一:[ 表达式1 ] 逻辑运算符 [ 表达式2 ]
格式二:命令1 逻辑运算符 命令2
逻辑运算符
-a或&&:逻辑与,而且的意思操作符前后条件都需成立
-o或||:逻辑或,或者的意思只需前后操作符中一个成立即可
!:逻辑否
查看指定主机是否在线
if语句
单分支语句
if 判断条件
then
条件成立的分支代码
fi 条件不成立直接结束
案例:判断已用磁盘空间是否大于80%,如果是就报警提示。
测试脚本:磁盘空间大于5%
双分支语句
if 判断条件
then
条件成立的分支代码
else
条件不成立的分支代码
fi
案例:检测80端口是否在监听,如果是,则提示”网站服务已在运行“;如果否,则启动httpd服务。
多分支语句
if 判断条件1
then
条件为1的真的分支代码
elif 判断条件2
then
条件为2为真的分支代码
elif 判断条件3
then
条件为3的真的分支代码
...
else
条件都为假的分支代码
fi
案例:用多分支 if 条件语句来判断用户输入的是一个文件还是一个目录。
case语句
case 变量引用 in
模式1)
命令分支1
;;
模式2)
命令分支2
;;
...
*)
默认命令分支
esac
注意:case支持通配符
* :任意长度任意字符;? :任意单个字符; [0-9] :指定范围内的任意单个字符 ; | :“或者”的意思,如: a|b。
案例:提示用户输入分数(0-100),判断分数范围,分出优秀、良好、及格、不及格四种。如果用户输入的分数值不在0-100之间,则提示重新输入。