此为不完全总结。bash 里的命令和符号和特殊字符还是挺多的。
测试表达式,不能直接写表达式,而要用命令:
注意表达式与两侧方括号之间必须有空格
test EXPRESSION 或 [ EXPRESSION ]
数值比较有专门的操作符:
-eq, -ne, -lt, -gt, -le, -ge
他们分别表示:
equal, not-equal, less than, greater than, less than or equal, greater than or equal
等于,不等于,小于,大于,小于等于,大于等于
字符串比较运算符类似其他语言:
=, !=, -n STRING, -z STRING
他们分别表示:
字符串相等,字符串不等,字符串非空时返回真,字符串为空时返回真
举栗子:
# 字符串判断:将返回真(bash 里命令执行后返回值0表示真,非0表示假)
[ "a" = "a" ]; echo $?
# 注意不加双引号的1也当成字符串,所以数值和字符串判断要用不同的比较符
[ "1" = 1 ]; echo $?
# 这样比较会返回假
[ "1" = 01 ]; echo $?
# 但数值比较会返回真,因为01就是1嘛
[ "1" -eq 01 ]; echo $?
逻辑运算符有:
用在表达式测试命令内的:
-a, -o, !
用在表达式测试命令外的(命令之间的逻辑运算):
&&, ||, !
举例:
# 与,将返回假
[ a = a -a a = b ]; echo $?
# 或,返回真
[ a = a -o a = b ]; echo $?
# 非,将返回真
[ ! a = b ]; echo $?
# 命令之间的与,YES 不会输出,因为字符串a 不等于 字符串b
[ a = b ] && echo "YES"
# 命令之间的或,yes 会输出
[ a = b ] || echo "YES"
# 非的使用,假设 aaxx 文件不存在,因为不存在 ls 返回假,非之后就返回真,所以输出 ok
if ! ls aaxx 2>/dev/null 1>&2; then echo ok; else echo bu-ok; fi
测试表达式,不能直接写表达式,而要用命令:
注意表达式与两侧方括号之间必须有空格
test EXPRESSION 或 [ EXPRESSION ]
数值比较有专门的操作符:
-eq, -ne, -lt, -gt, -le, -ge
他们分别表示:
equal, not-equal, less than, greater than, less than or equal, greater than or equal
等于,不等于,小于,大于,小于等于,大于等于
字符串比较运算符类似其他语言:
=, !=, -n STRING, -z STRING
他们分别表示:
字符串相等,字符串不等,字符串非空时返回真,字符串为空时返回真
举栗子:
# 字符串判断:将返回真(bash 里命令执行后返回值0表示真,非0表示假)
[ "a" = "a" ]; echo $?
# 注意不加双引号的1也当成字符串,所以数值和字符串判断要用不同的比较符
[ "1" = 1 ]; echo $?
# 这样比较会返回假
[ "1" = 01 ]; echo $?
# 但数值比较会返回真,因为01就是1嘛
[ "1" -eq 01 ]; echo $?
逻辑运算符有:
用在表达式测试命令内的:
-a, -o, !
用在表达式测试命令外的(命令之间的逻辑运算):
&&, ||, !
举例:
# 与,将返回假
[ a = a -a a = b ]; echo $?
# 或,返回真
[ a = a -o a = b ]; echo $?
# 非,将返回真
[ ! a = b ]; echo $?
# 命令之间的与,YES 不会输出,因为字符串a 不等于 字符串b
[ a = b ] && echo "YES"
# 命令之间的或,yes 会输出
[ a = b ] || echo "YES"
# 非的使用,假设 aaxx 文件不存在,因为不存在 ls 返回假,非之后就返回真,所以输出 ok
if ! ls aaxx 2>/dev/null 1>&2; then echo ok; else echo bu-ok; fi
编辑回复