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 -mtotal 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
- 最后的)表示默认模式,其中的相当于通配符