测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。
格式:
test 条件表达式
或 [ 条件表达式 ] (条件表达式的两边都需要有空格,且此方法更为常用)
常见的测试操作符 | 含义 |
---|---|
-d | 测试是否为目录(directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(eXcute) |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-ef | 判断两个文件是否为同一文件 |
示例1:
示例2:
**示例3:**可以使用&&和echo一起用
示例4:可以和||一起用
**示例5:**比较两个文件
格式:
[ 整数1 操作符 整数2 ]
常见测试操作符:
操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
示例1: :查询当前目录下的文件数是否大于10,如果大于,则进行提示。
[root@localhost ~]#ls |wc -l
15
[root@localhost ~]#test `ls |wc -l` -gt 10 && echo 文件数大于10
文件数大于10
示例2: 查看系统内存是否低于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 = 字符串2 ] #判断是否相等
[ 字符串1 != 字符串2 ] #判断是否不等
[ -z 字符串 ] #判断字符串内容是否为空
操作符:
操作符 | 含义 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串内容为空 |
示例: 判断当前系统语言环境是否为“us.en”,如果不是则提示
[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 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
操作符:
-a或&& | 逻辑与,而且的意思 |
---|---|
-o或▕▕ | 逻辑或,或者的意思 |
! | 逻辑否 |
格式:
if [ 条件判断式 ]; than
当条件判断成立时,执行一条或多条命令
fi
如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作
示例: 使用单分支if语句判断test文件是否存在
[root@localhost ~]#if test -e data; then echo 文件存在; fi
文件存在
[root@localhost ~]#
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当条件判断不成立时,可以执行一条或多条命令
fi
在同一个数据的判断中,如果该数据需要进行两种不同的判断,我们就需要双分支if语句了:
示例: 判断用户输入的是否为yes
[root@localhost ~]#vim reboot.sh
#/bin/bash
read -p "请输入yes确定重启:" TEST
if [ $TEST = "yes" ]
then
echo 系统即将重启
else
echo 没有输入yes,系统将不重启
fi
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当上面的条件判断都不成立时,可以执行一条或多条命令
fi
如果数据需要进行多种不同的判断,则可以使用多分支结构 嵌套使用。
[root@localhost ~]#vim reboot1.sh
read -p "请输入yes或no:" TEST
if [ $TEST = "yes" ]
then
echo 你输入的为$TEST!
elif [ $TEST = "no" ]
then
echo 你输入的为$TEST!
else
echo 你输入的${TEST}有错误,请重启输入yes或者no!
fi
格式:
case 变量名称 in
模式1)
命令序列
;;
模式2)
程序段
;;
*)
不包含第一个变量内容与第二个变量内容的其他程序执行段
默认程序段
;;
esac
注意点:
case行首必须以单词“in”,每一模式必须以单个右括号")"结束
*
双分号";;"表示命令序列的结束
*
模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b
*
最后的*)表示默认模式,其中的*相当于通配符
**示例:**不管输出大小写字母,都能输出yes或者no
#!/bin/bash
read -p "请输入yes或者no:" i
case $i in
[Yy]|[Yy][Ee][Ss])
echo "你输入的yes正确"
;;
[Nn]|[Nn][Oo])
echo "你输入的no正确"
;;
esac
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/m0_51160032/article/details/120865523
内容来源于网络,如有侵权,请联系作者删除!