【备忘】shell脚本条件测试常用表达式

基本格式

shell中条件测试语句的基本语法如下

if [ $a==$b ]; then
	# do something
elif [ $a -gt $b ]; then
	# do something
else
	# do something
fi

敲黑板:条件测试必须放在方括号内,并且表达式与方括号之间需要有空格

条件测试参与布尔运算:

  • if [ condition1 ] && [ condition2 ]: 逻辑与,同时满足condition1和condition2
  • if [ condition1 ] || [ condition2 ];: 逻辑或,满足condition1或condition2

数字比较(仅限整数)

由于><在shell中还有重定向的功能,因此比较数字时大于号和小于号需要转义。各种比较方式如下:

  • 判断两个整数是否相等:if [ $a == $b ]if [ $a -eq $b ]
  • 判断两个整数是否不等:if [ $a != $b ]if [ $a -ne $b ]
  • 判断是否大于:if [ $a -gt $b ]if [ $a \> $b ]
  • 判断是否小于:if [ $a -lt $b ]if [ $a \< $b ]
  • 判断是否大于或等于:if [ $a -ge $b ]
  • 判断是否小于或等于:if [ $a -le $b ]

字符串

基本比较

字符串比较使用的是字典顺序,而-eq-lt等比较只能用于整数比较,因此字符串的比较只能使用转义后的大于号和小于号:

  • 比较两字符串是否相等: if [ $str1 == $str2 ]
  • 比较两字符串是否不等: if [ $str1 != $str2 ]
  • 比较是否大于: if [ $str1 \> $str2 ]
  • 比较是否小于: if [ $str1 \< $str2 ]
  • 判断字符串长度是否不为0: if [ -n $str1]
  • 判断字符串长度是否为0: if [ -z $str1]

长度比较

可以使用${#str}来获取字符串的长度,故可以判断长度是否满足各种不同的要求,如:

  • 判断字符串长度是否等于5:if [ ${#str} -eq 5 ]
  • 判断字符串长度是否大于10:if [ ${#str} -gt 10 ]
  • 判断字符串长度是否小于等于99:if [ ${#str} -le 99 ]

模式匹配

可以使用if [[ $str =~ pattern ]]的形式来判断字符串是否匹配某种模式。如:

  • 判断字符串是否是整数: if [[ $str =~ ^[0-9]+$ ]]
  • 判断字符串是否以-开头,常用于参数解析: if [[ $str =~ ^- ]]
  • 判断字符串是否在某个数组中: if [[ "${arr[@]}" =~ $str ]]

文件比较

常常在shell脚本中判断各种文件或目录是否满足要求,常用语法如下:

  • 判断某路径是否存在,路径可能是文件也可能是目录: if [ -e $path ]
  • 判断路径是否存在,并且是目录: if [ -d $dirPath ]
  • 判断路径是否存在,并且是文件: if [ -f $filePath ]
  • 判断路径是否存在,并且是文件,同时内容非空: if [ -s $filePath ]
  • 判断路径是否存在,并且是文件,同时可读: if [ -r $filePath ]
  • 判断路径是否存在,并且是文件,同时可写: if [ -w $filePath ]
  • 判断路径是否存在,并且是文件,同时可运行: if [ -x $filePath ]
  • 判断路径是否存在,并且是文件,同时归属当前用户: if [ -o $filePath ]
  • 判断路径是否存在,并且是文件,同时其默认组与当前用户所在组一致: if [ -G $filePath ]
  • 判断path1是否比path2新: if [ $path1 -nt $path2 ]
  • 判断path1是否比path2旧: if [ $path1 -ot $path2 ]
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值