shell中比较(文件测试,字符串,整数)
- [ -f /root/file.txt ],[ -d /root/mydir ]
- [[ -f /root/file.txt ]]
文件测试方面[[]]与[]一样
- [ -z "${str}" ],[ "${str}" != "${str}" ],[ ! -n "${str}" ]
[]只能用于字符比较,不能用于模式匹配 - [[ -z "${str}" ]],[[ ! -n "${str}" ]]
- [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
[[ hello == hell? ]] # 模式匹配[[ ab == "test" ]] # 如果$a等于"test",那么结果为true
[[]]可以进行模式匹配,使用"str"则str为字符串对待 - 字符串比较时可以把右边的作为一个模式(这是右边的字符串不加双引号的情况下。如果右边的字符串加了双引号,则认为是一个文本字符串。),而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。
- 使用-a,-o进行逻辑连接:[ "${str1}" == "test" -a -z "${str}" ]
- 使用-a,-o进行逻辑连接:[[ "${str1}" == "test" && -z "${str}" ]]
[]使用-a,-o,[[]]使用&&,|| - 字符串包含:[[ "$a3" =~ "$a1" ]]
如果a1包含在a3中,则为真
- ((4 > 2)),((4+2 > 3))
#这个算术运算,整数比较都适用 - [ 5 -gt 3 ],[ 5 \> 3 ]
- [[ 5 > 3 ]],[[ 5 -gt 3 ]]
- [[3+5 -gt 2]]
不可使用<,>,结果经常出错 - ((a + b))
结果为非0值时,返回真
- 在bash中((...))主要进行算术运算(上面的两个都不行),也比较适合进行整数比较,可以直接使用熟悉的<,>等比较运算符。可以直接使用变量名如var而不需要$var这样的形式。支持分号隔开的多个表达式
- 在命令行里test expr和[ expr ]的效果相同。test的三个基本作用是判断文件、判断字符串、判断整数。支持使用与或非将表达式连接起来
2.test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq, -gt这种形式。如果比较"ab"和"bc",必须使用转义符:[ ab \< bc ] - [[ ]],这是内置在shell中的一个命令,它支持字符串的模式匹配,逻辑组合可以不使用test的-a,-o而使用&&,||这样更亲切的形式
- [ ... ]为shell命令,所以在其中的表达式应是它的命令行参数,所以串比较操作符">"与"<"必须转义,否则就变成IO改向操作符了. 在[[中"<"与">"不需转义
运算符 | 描述 | 示例 |
文件比较运算符 | ||
-e filename | 如果 filename 存在,则为真 | [ -e /var/log/syslog ] |
-d filename | 如果 filename 为目录,则为真 | [ -d /tmp/mydir ] |
-f filename | 如果 filename 为常规文件,则为真 | [ -f /usr/bin/grep ] |
-L filename | 如果 filename 为符号链接,则为真 | [ -L /usr/bin/grep ] |
-r filename | 如果 filename 可读,则为真 | [ -r /var/log/syslog ] |
-w filename | 如果 filename 可写,则为真 | [ -w /var/mytmp.txt ] |
-x filename | 如果 filename 可执行,则为真 | [ -L /usr/bin/grep ] |
filename1 -nt filename2 | 如果 filename1 比 filename2 新,则为真 | [ /tmp/install/etc/services -nt /etc/services ] |
filename1 -ot filename2 | 如果 filename1 比 filename2 旧,则为真 | [ /boot/bzImage -ot arch/i386/boot/bzImage ] |
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法) | ||
-z string | 如果 string 长度为零,则为真 | [ -z "$myvar" ] |
-n string | 如果 string 长度非零,则为真 | [ -n "$myvar" ] |
string1 = string2 | 如果 string1 与 string2 相同,则为真 | [ "$myvar" = "one two three" ] |
string1 != string2 | 如果 string1 与 string2 不同,则为真 | [ "$myvar" != "one two three" ] |
算术比较运算符 | ||
num1 -eq num2 | 等于 | [ 3 -eq $mynum ] |
num1 -ne num2 | 不等于 | [ 3 -ne $mynum ] |
num1 -lt num2 | 小于 | [ 3 -lt $mynum ] |
num1 -le num2 | 小于或等于 | [ 3 -le $mynum ] |
num1 -gt num2 | 大于 | [ 3 -gt $mynum ] |
num1 -ge num2 | 大于或等于 | [ 3 -ge $mynum ] |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。