【shell笔记】shell 中的字符串比较,数值比较运算,逻辑运算总结

回复 收藏
此为不完全总结。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



2016-03-03 22:13 举报
已邀请:

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: