条件测试语法
在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,让我们可以方便的完成判断。
语法
支持三种格式的条件测试语法
- test<测试表达式>
- [ <测试表达式> ]
- [[ <测试表达式> ]]
格式1和格式2是等价的,格式3为扩展的test命令
在[[]]中可以使用通配符进行匹配。&&、||、>、<等操作符可以应用与[[]]中,但不能应用与[]中。
范例
文件存在则输出1,文件不存在则输出0
[[email protected] ~]# [ -f /etc/passwd ] && echo 1||echo 0
1
[[email protected] ~]# test -f /etc/passwd && echo 1||echo 0
1
[[email protected] ~]# [[ -f /etc/passwd ]] && echo 1||echo 0
1
[[email protected] ~]# [[ -f /etc/passd ]] && echo 1||echo 0
0
非!的写法
test.txt文件如果不存在,则创建。
[[email protected] ~]# test ! -f test1.txt && touch test.txt || ehco "test1.txt已经存在"
[[email protected] ~]# test ! -f test1.txt && touch test1.txt || echo "test1.txt已经存在"
test1.txt已经存在
[[email protected] ~]# [ ! -f test.txt ] && touch test.txt || echo 'test.txt已经存在'
[[email protected]~]# [ ! -f test.txt ] && touch test.txt || echo 'test.txt已经存在'
test.txt已经存在
test 或 [] 测试语法
从功能上来看 test 测试表达式
命令等同于 [测试表达式]
,因此这里将它们归纳在一起进行总结。
数值测试
参数说明
参数 | 说明 |
---|---|
-eq | 等于则为真 |
-ne | 不等于则为真 |
-gt | 大于则为真 |
-ge | 大于等于则为真 |
-lt | 小于则为真 |
-le | 小于则为真 |
范例
判断两个数是否相等
[[email protected] ~]# num1=1
[[email protected] ~]#chenfanlinux num2=2
[[email protected] ~]# [ $num1 -eq $num2 ] && echo "两个数相等" || echo "两个数不相等"
两个数不相等
数值运算
[[email protected] ~]# a=5
[[email protected] ~]# b=6
[[email protected] ~]# c=$[a+b]
[[email protected] ~]# echo $c
11
[[email protected] ~]# ((c=a+b))
[[email protected] ~]# echo $c
11
[[email protected] ~]# c=`expr $a + $b`
[[email protected] ~]# echo $c
11
[[email protected] ~]# let c=a+b
[[email protected] ~]# echo $c
11
- (())
- let
- expr
- bc(小数)
- $[]
字符串测试
参数说明
参数 | 说明 |
---|---|
“串1” = “串2” | 若串1等于串2则真,可以使用”==”代替”=” |
“串1” != “串2” | 若串1不等于串2则真,但不能用”!==” 代替”!=” |
-z “字符串” | 若串长度为0则真,-z可以理解为zero |
-n “字符串” | 若串长度不为0则真,-n可以理解为no zero |
范例
比较两个字符串是否相同
num1="chenfan"
num2="chenfanlinux"
if [ "$num1" = "$num2" ]
then
echo '两个字符串相等!'
else
echo '两个字符串不相等!'
fi
文件测试
参数说明
参数 | 说明 |
---|---|
-e 文件名 | 如果文件存在则为真 |
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写则为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为块特殊文件则为真 |
以上表格中的字符串测试操作符号务必要用 “字符串” 引起来。
范例
文件存在则打印存在
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
逻辑操作符
参数说明
范例
判断文件是否同时存在
[[email protected] ~]# f1='/etc/rc.local'
[[email protected] ~]# f2='/etc/pass'
[[email protected] ~]# [ -f "$f1" -o -f "$f2" ] && echo 1|| echo 0
1
[[email protected] ~]# [ -f "$f1" -a -f "$f2" ] && echo 1|| echo 0
0
原文地址:https://www.cnblogs.com/chinatrump/p/11597021.html
时间: 2024-10-09 03:05:30