条件测试
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,返回值为非0值时表示失败或异常。
test命令
对特定条件进行测试,并根据返回值来判断条件是否成立。
-
格式一:test 条件表达式
-
格式二:[条件表达式]
注意:方括号“["或"]”与条件表达式之间需要至少一个空格进行分隔
文件测试
[ 操作符 文件或目录 ]
常用的操作符
| 操作符 | 作用 |
|---|---|
| -e | 测试目录或文件是否存在 |
| -d | 测试是否为目录 |
| -f | 测试是否为文件 |
| -r | 测试当前用户是否有权限读取 |
| -w | 测试当前用户是否有权限写入 |
| -x | 测试是否设置有可执行权限 |
| -L | 测试是否为符号链接 |
-
测试目录或文件是否存在
-
测试是否为文件或目录
-
测试权限
整数测试
#整数值比较
[ 整数变量1 操作符 整数变量2 ]
常用的操作符
| 操作符 | 作用 |
|---|---|
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -lt | 小于 |
| -le | 小于等于 |
| -ge | 大于等于 |
-
检测用户数量
-
检测内存使用大小
字符串测试
#检测两字符串是否相同
[ 字符串1 = 字符串2 ]或[ 字符串1 == 字符串2 ]
#检测两字符串是否不同
[ 字符串1 != l字符串2 ]
#检查字符串是否为空(zero),对于未定义或赋予空值的变量将视为空串
[ -z "字符串" ]
#检查是否有字符串存在
[ -n "字符串" ]
注意:引号的使用,这是防止空格扰乱代码的好方法
-
测试当前语言环境
-
测试读入的字符串
逻辑测试
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常用操作符
| 操作符 | 作用 |
|---|---|
| -a 或 && | 逻辑与,“而且”的意思,前后条件都得成立 |
| -o 或 || | 逻辑或,“或者”的意思,前后条件成立一个即可 |
| ! | 逻辑否 |
if语句
补充:三元运算符
#C语言和JAVA中
#条件运算符如果成立,取值1;如果不成立,取值2
条件运算符?值1:值2
#SHELL中
[ 条件运算符 ] && 值1 || 值2
if单分支语句
if 条件测试操作
then 命令序列
fi
- 磁盘空间警告
配置文件demo5.sh为方便演示,此处脚本文件中判断条件改成-gt 5
if双分支语句
if 条件测试操作
then 命令序列1
else 命令序列2
-
判断主机是否存活
-
检测80端口是否在运行
if多分支语句
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
- 分数定级
case分支语句
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
......
\*)
默认命令序列
esac
- 分数定级
case语句管理firewalld服务
进入/etc/init.d/目录中写一个firewalld脚本
开启服务,查看服务
停止服务
错误输入