shell脚本条件测试语句,if,case
- 一.条件测试
- 1.1test命令
- 1.2文件测试
- 1.2.1文件测试常见选项
- 1.3数值比较
- 1.4字符串比较
- 1.5逻辑测试
- 二.if语句
- 2.1单分支结构
- 2.3多分支
- 三.case语句
一.条件测试
1.1test命令
测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值。
格式:
test 条件表达式
或【条件表达式】(条件表达式的两边都需要有空格,且此方法更为常用)
1.2文件测试
1.2.1文件测试常见选项
常见的测试操作符 | 含义 |
---|---|
-d | 测试是否为目录 |
-e | 测试目录或文件是否存在 |
-f | 测试是否为文件 |
-r | 测试当前用户是否有权限读取 |
-w | 测试当前用户是否有权限写入 |
-x | 测试当前用户是否有权限执行 |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-ef | 判断两个文件是否为同一文件 |
1.3数值比较
格式:
【整数1 操作符 整数2】
常见测试操作符
操作符 | 含义 |
---|---|
-eq | 等于 |
-ne | 不等于 |
-lt | xiaoyu |
-gt | 大于 |
-le | 小于或等于 |
-ge | 大于或等于 |
查询当前目录下的文件数是否大于10,如果大于,则进行提示
[root@localhost ~]#ls |wc -l
15
[root@localhost ~]#test `ls |wc -l` -gt 10 && echo 文件数大于10
文件数大于10
查看系统内存是否低于1024M ,如果低于则提示
[root@localhost ~]#free -m
total used free shared buff/cache available
Mem: 1758 359 790 17 608 1161
Swap: 3839 0 3839
[root@localhost ~]#free -m|grep "Mem"
Mem: 1758 359 791 17 608 1161
[root@localhost ~]#free -m|grep "Mem"|awk '{print $4}'
790
[root@localhost ~]#free=`free -m|grep "Mem"|awk '{print $4}'`
[root@localhost ~]#echo $free
790
[root@localhost ~]#test `echo $free` -lt 1024 && echo 内存不足1024M
内存不足1024M
[root@localhost ~]#
1.4字符串比较
格式:
【字符串1=字符串2】 # 判断是否相等
【字符串1!= 字符串2】 # 判断是否不等
【-z 字符串】 # 判断字符串是否为空
操作符
操作符 | 含义 |
---|---|
= | 字符串内容相等 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串为空 |
[root@localhost ~]#echo $LANG
zh_CN.UTF-8
[root@localhost ~]#test `echo $LANG`="us.en"&&echo 当前系统语言不是us.en,当前系统语言为`echo $LANG`
当前系统语言不是us.en,当前系统语言为zh_CN.UTF-8
[root@localhost ~]#
1.5逻辑测试
格式:
【表达式1】操作符 【表达式2】
命令1 操作符 命令2
操作符:
-a或&& | 逻辑与,而且的意思 |
---|---|
-o或ll | 逻辑或,或者的意思 |
! | 逻辑否 |
二.if语句
2.1单分支结构
格式
if 【条件判断式】;than
当条件判断成立时,执行一条或多条命令
fi
如果只有一个判断式要进行,那么我们可以使用单分支的if语句,只有在条件成立时才会执行,否则不会执行任何操作
2.3多分支
if【条件判断式】;then
当条件判断成立时,可以执行一条或多条命令
elif【条件判断式二】;then
当条件判断成立时,可以执行一条或多条命令
else
当上面条件判断都不成立时,可以执行一条或多条命令
fi
如果数据需要进行多种不同得到判断,则可以使用多支结构嵌套使用
三.case语句
格式;
case 变量名称 in
模式1)
命令序列
;;
模式2)
程序段
;;
*)
不包含第一个变量内容与第一个变量内容的其他程序执行段
默认程序段
;;
esac
注意点:
- case行首必须以单词“in”,每一模式必须以单个右括号结束
- 双分号“;;”表示命令序列的结束
- 模式字符串中,可以用方括号表示一个连续的范围,如“【0-9】”;还可以使用|表示或,比如a|b
- 最后的)表示默认模式,其中的相当于通配符