Linux Shell 编程中 常用的 比较运算符
普通比较 包含在 []中
数值比较(双目)
- -eq : 相等判断(equal)
- -ne: 不等于判断(not equal)
- -lt: 小于判断(less than)
- -gt: 大于判断(greater than)
- -le: 小于等于(less than or equal)
- -ge: 大于等于(greater than or equal)
字符串比较
双目
- =: 相等比较
- \>: 大于比较(按照字典顺序比较, 因为 > 本身是重定向的符号,因而在shell编程中需要加\来转义)
- \<: 小于比较(同上)
- !=: 不等于比较
单目
- -n: 判断字符产长度是否非0 (none zero)
- -z: 判断字符串长度是否为0 (zero)
文件比较
单目
- -d: 判断文件手否存在且是一个目录(directory)
- -e: 判断文件是否存在(exitence)
- -f: 判断文件是否存在且是一个文件(非目录)(file)
- -s: 判断文件是否存在且非空(signed)
- -r: 判断文件是否存在并且可读(readable)
- -w: 判断文件是否存在且可写(writable)
- -x:判断文件是否存在且可执行(excutable)
- -O: 判断文件是否存在且属于当前用户所有(own)
- -G:判断文件是否存在且默认组和当前用户相同(group)
双目
- -nt: 判断两个文件是否前者比后者新(new time)
- -ot: 判断两个文件是否前者比后者旧(old time)
高级比较
包含在 (()) 和 [[]]中
((expression)): 高级数学表达式比较:
expression 不需要是由 -eq, \le,…, 而是直接使用 ==, < …
例:
#! /bin/bash
var=10
if ((10 == $var))
then
echo "hello $var = 10"
fi
if ((10 ** 2 > $var + 20))
then
square=$[ 10**2 ]
echo "hello 10 ** 2 = $square > $var + 20"
fi
结果
hello 10 = 10
hello 10 ** 2 = 100 > 10 + 20
[[expression]]: 高级字符产表达式比较
#!/bin/bash
str="hello world"
if [[ $str == h*d ]]
then
echo "yes $str == 'h*d'"
fi
结果
yes hello world == 'h*d'