文章目录
一、判断
1.符号说明
1.1 关于某个档名的文件类型
判断
如test -e filename表示存在否
符号 | 说明 |
---|---|
-e | 该档名是否存在? (常用) |
-f | 该档名是否存在且为档案(file) ? (常用) |
-d | 该文件名是否存在且为目录(directory) ? (常用) |
1.2 关于档案的权限侦测
如test -r filename表示可读否(但root权限常有例外)
符号 | 说明 |
---|---|
-r | 侦测该档名是否存在且具有可读的权限? |
-w | 侦测该档名是否存在且具有可写的权限? |
-x | 侦测该档名是否存在且具有可执行的权限? |
1.3 关于两个整数之间的判定
例如test n1 -eq n2
符号 | 说明 |
---|---|
-eq | 两数值相等(equal) |
-ne | 两数值不等(not equal) |
-gt | n1大于n2 (greater than) |
-lt | n1小于n2 (less than) |
-ge | n1大于等于n2 (greater than or equal) |
-le | n1小于等于n2 (less than or equal) |
- 试验:创建test_eq.sh,编辑:
#!/bin/bash
#功能:条件判断
num1=100
num2=100
if test $[num1] -eq $[num2]
then
echo '两个数相等!'
else
echo '两个数不相等!'
fi
运行:
[jingkong@muguangjingkong ~]$ sh test_eq.sh
两个数相等!
1.4 判定字符串的数据
符号 | 说明 |
---|---|
test -Z string | 判定字符串是否为0?若string为空字符串,则为true |
test -n string | 判定字符串是否非为0?若string为空字符串,则为false 注: -n亦可省略 |
test str1 = str2 | 判定str1是否等于str2,若相等,则回传true |
test str1!= str2 | 判定str1是否不等于str2,若相等,则回传false |
2.判断符号“[]”
除了使用的test之外还可以利用判断符号“[]”
(就是中括号)来进行数据的判断
举例来说,如果我想要知道$HOME这个变量是否为空的,可以这样做:
# [-z "$HOME"];echo $?
使用中括号必须要特别注意,因为中括号用在很多地方,包括通配符与正规表示法等等,所以,如果要在bash的语法当中使用中括号作为shell的判断式时,必须要注意中括号的两端需要有空格符来分隔
[ “MAIL” ]
注:赋值时等号两边没空格,比较或测试时运算符两边都要有空格
二、if 判断
1.单层、简单条件判断式
如果只有一个判断式要进行,
if [条件判断式];then
当条件判断式成立,可以进行的指令工作内容;
fi <==将if反过来写,即结束if
是将多个条件写入一个中括号内可以用多个中括号来隔开,而括号与括号之间,则以&&或ll来隔开,他们的意义是:
&& 代表AND;
|| 代表or ;
- 举例:
if["$yn" == "Y"]||["$yn^ == "y"];then
echo "OK, continue"
exit 0
fi
if[ "$yn" == "N"]||["$yn" == "n"];then
echo "interrupt"
exit 0
fi
2.多重、复杂条件判断式
在同一个数据的判断中,如果该数据需要进行多种不同的判断时,想要作多次if的判断,要用到底下的语法:
#一个条件判断,分成功进行与失败进行(else)
if[条件判断式]; than
当条件判断式成立时,可以进行的指令工作内容;
else
当条件判断式不成立时,可以进行的指令工作内容;
fi
如果考虑更复杂的情况,则可以使用这个语法:
#多个条件判断(if...elif...elif...else)分多种不同情况执行
if[条件判断式一];then
当条件判断式一成立时,可以进行的指令工作内容;
elif [条件判断式];then
当条件判断式二成立时,可以进行的指令工作内容;
else
当条件判断式-与均不成立时 ,可以进行的指令 工作内容;
fi
要注意的是,elif也是个判断式因此出现elif后面都要接then来处理
!但是else已经是最后
的没有成立的结果了,所以else后面并没有then