表达式 | 说明 |
---|---|
test 表达式 | test命令进行条件测试 |
[ 表达式 ] | 单中括号方式,功能同test命令,推荐 |
[[ 表达式 ]] | 双中括号,前两种的升级版 |
((表达式)) | 双小括号,一般用于if语句 |
双中括号可以使用通配符 &&、||、<、>等可以用于双中括号,不能用于单中括号 单中括号中用-a、-o、-gt、-lt代替 整数的关系运算也可以用双小括号 中括号里表达式前后都需要有空格
test -f /etc/passwd && echo 1 || echo 0
[ -f /etc/passwd ] && echo 1 || echo 0
[[ -f /etc/passwd ]] && echo 1 || echo 0
((3>2)) && echo 1 || echo 0
可以只写一半的条件语句,例如只写为真、为假时怎么操作
test -f /etc/passwd && echo 1
test -f /etc/passwd || echo 0
如果需要执行的命令有多条,可以用下面的扩展语法
[ 条件1 ] &&{
命令1
命令2
命令3
}
操作符 | 操作符说明 |
---|---|
-d | 文件存在且为目录 |
-f | 文件存在且为普通文件 |
-e | 文件存在,不管是什么文件类型 |
-r | 文件存在且可读 |
-w | 文件存在且可写 |
-x | 文件存在且可执行 |
-s | 文件存在且大小不为0 |
-L | 文件存在且为链接文件 |
f1 -nt -f2 | 前面的文件比后面的文件新 |
f1 -ot -f2 | 前面的文件比后面的文件旧 |
以上文件操作符对[]、[[]]、test三者通用 读写执行权限并不全看文件属性,而是要结合实际用户,如root在没有读写权限时也能读写
[ -f /etc/passwd ] && echo 1||echo 0
[ -d /etc/passwd ] && echo 1||echo 0
[ -e /etc/passwd ] && echo 1||echo 0
[ -r /etc/passwd ] && echo 1||echo 0
[ -x /etc/passwd ] && echo 1||echo 0
[ -w /etc/passwd ] && echo 1||echo 0
[ -L /etc/passwd ] && echo 1||echo 0
操作符 | 操作符说明 |
---|---|
-n "字符串" | 若字符串长度不为0则表达式成立 |
-z "字符串" | 若字符串长度为0则表达式成立 |
"串1" = "串2" | 若字符串1等于字符串2则表达式成立 |
"串1" != "串2" | 若字符串1不等于字符串2则表达式成立 |
对字符串的测试一定要将字符串加双引号后再比较 比较符号(如=和!=)两端一定要有空格
[ -n "" ] && echo 1 || echo 0
[ -z "" ] && echo 1 || echo 0
[ "abc" = "abc" ] && echo 1 || echo 0
[ "abc" != "abc" ] && echo 1 || echo 0
[]和test中 | (())和[[]]中 | 说明 |
---|---|---|
-eq | ==或= | 等于 (equal) |
-ne | != | 不等于 (not equal) |
-gt | > | 大于 (greater than) |
-ge | >= | 大于等于 (greater equal) |
-lt | < | 小于 (less than) |
-le | <= | 小于等于 (less equal) |
=和!=也可以在[]中做比较实用,但是需要转义 -gt和-lt也能在[[]]中使用,但不建议 比较符号两端也要有空格
[]和test中 | (())和[[]]中 | 说明 |
---|---|---|
-a | && | and,与 |
-o | || | or,或 |
! | ! | not,非 |
> 连接两个[]或[[]]的表达式可以用&&或|| |
-a和&&,需要两端为真才为真 -o和||,只需要任意一段为真就为真`
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。