3.1 shell的条件测试
条件测试,作用是验证条件是否符合预期。以下是常用语法
条件测试语法 | 说明 |
---|---|
语法1:test <测试表达式> | 利用test命令测试条件表达式。test命令和” <测试表达式>”之间至少有一个空格 |
语法2:[ <测试表达式> ] | 通过[](单中括号)测试条件表达式的方法,和test命令的用法相同,注意[]的边界和内容之间至少有一个空格 |
语法3:[[ <测试表达式> ]] | 通过[[]](双中括号)测试条件表达式的值的方法,是比test和[]更新的语法格式。[[]]的边界和内容之间至少有一个空格 |
语法4:((测试表达式)) | 通过(())(双小括号)进行测试条件表达式的方法,一般用于if语句里。(())双小括号两段不需要有空格 |
针对以上表有几个注意事项需要说明:
- Ø 语法1中的test命令和语法2中的[]是等价的。语法3中的[[]]为扩展的test命令,语法4中的(())命令常用于计算,建议在生产环境中使用相对友好的语法2,即中括号[]的语法
- Ø 在双中括号[[]]中可以使用通配符(如*)等进行模式匹配,这是区别于其他几种语法的地方
- Ø &&、||、>、<等操作符可以应用到[[]]中,但不能应用于[]中,在[]中一般用-a、-o、-gt、-lt取代
- Ø 对于整数的关系运算,也可以使用Shell的算术运算符(())
- Ø 条件测试简单语法示例
n test条件测试语句示例
n []条件测试语句示例
第二年.jpeg
- Ø 特殊的条件测试表达式语句,可以执行多个命令
[ 条件1 ] && {
命令1
命令2
...
}
[[ 条件1 ]] && {
命令1
命令2
...
}
test 条件1 && {
命令1
命令2
...
}
3.2 文件测试表达式
对于文件测试表达式中,常用的文件测试操作符如下所示:
类型 | 说明 |
---|---|
[ -f file ],f的全称为file | 文件存在 |
[ -e file ],e的全称为exist | 文件(夹)存在 |
[ -d dir ],d的全称为directory | 是目录 |
[ -L file ],L的全称为link | 是软链接 |
[ -s file ],s的全称为size | 文件存在且非空 |
[ -S file ],S的全称为Socket | 文件是Socket文件 |
[ -r file ],r的全称为read | 文件可读 |
[ -w file ],w的全称为write | 文件可写 |
[ -x file ],x的全称为executable | 文件可执行 |
练习:
以脚本传参和read读入的方式输入两个文件路径,任意一个文件不存在,则提示用户第几个文件不存在,并退出脚本(两个脚本)
# 第一个文件不存在,则
[ -f $1 ] || {
echo "第一个文件不存在"
exit
}
# 第二个文件不存在,则
注:建议大家:在脚本的健壮性为前提下,重复的代码尽量简化
3.3 字符串测试表达式
字符串测试表达式的作用:比较两个字符是否相同、测试字符串的长度是否为0、字符串是否为NULL等,常用的字符串操作符如下所示:
表达式 | 说明 |
---|---|
[ “b” ] | 测试字符串是否相等。用作赋值时两边不能有空格,用做判断时必须有空格。 |
[ “b” ] | 测试字符串是否不相等 |
[ -n “$str” ] | 判断字符串是否非空 |
[ -z “$str” ] | 判断字符串是否为空 |
[ $str ] | 判断字符串是否非空,类似于 -n |
注意:对于字符串测试的时候,一定要把字符串加双引号,如[ -n “myvar” ]、[ “b” ]
3.4 整数二元比较操作符
整数二元比较操作符使用参考
在[]以及test中使用的比较符号 | 在(())和[[]]中使用的比较符号 | 说明 |
---|---|---|
-eq | ==或= | 相等的英文equal |
-ne | != | 不相等的英文not equal |
-gt | > | 大于的英文greater than |
-ge | >= | 大于等于的英文greater equal |
-lt | < | 小于的英文less than |
-le | <= | 小于等于的英文less equal |
注意:不推荐使用[[]]和>、<等符号比较数字,因为在大小比较中,[[]]比较的是字符串的arscII码
有关[]、[[]]、(())用法小结
- Ø 整数加双引号比较也可以
- Ø [[]]中使用类似-eq的写法是正确的,而[[]]中用类似>、<的写法也可能不对,有可能值比较第一位,原因在于arscII码的特殊性
- Ø [[]]中用类似>、<的写法语法没错(经过转义),但是逻辑结果不对,使用=、!=可以正确比较
- Ø (())中不能使用类似-eq的写法,可以使用类似>、<、==(=不可以)的写法
- Ø oldchang倾力推荐:在比较数字的时候推荐使用[]和-gt、-lt等类似的搭配,或者使用(())和>、<等搭配
3.5 逻辑操作符
在[]和test中使用操作符 | 在[[]]和(())中使用操作符 | 说明 |
---|---|---|
-a | && | and,与运算,两端都真则为真 |
-o | || | or,或运算,两端有一个为真则真 |
! | ! | not,非,相反为真 |
注意,连接两个含有[]、test或者[[]]的表达式用&&、||
网友评论