Shell条件测试

13 篇文章 0 订阅

 

目录

一. 测试语法

二.逻辑运算符

三.数值比较

四.字符串比较

五.文件测试


一. 测试语法

(1)test 条件表达式

例:

#判断两个字符串是否相等
if test "$str1" = "$str2"; then
    echo "字符串相等"
fi

#判断文件是否存在
if test -e "$file"; then
    echo "文件存在"
fi

(2)[ 条件表达式 ]

#判断两个字符串是否相等
if [ "$str1" = "$str2" ]; then
 echo "字符串相等"; fi
#判断一个整数是否大于另一个整数
if [ $num1 -gt $num2 ]; then
 echo "整数大于"; fi
#使用 &&(与)运算符组合多个条件表达式
if [ $num1 -gt 0 ] && [ $num2 -lt 10 ]; then echo "满足条件"; fi

(3)[[ 条件表达式 ]]

用法与单组[ ] 一样,就比在原基础上多一组中括号。 

二.逻辑运算符

  • &&(逻辑与):当且仅当两边的表达式都为真时,整个表达式的结果才为真。这类似于其他编程语言中的 AND 操作符。
  • ||(逻辑或):如果两边的任一表达式为真,则整个表达式的结果为真。这类似于其他编程语言中的 OR 操作符。
  • !(逻辑非):用于反转一个表达式的真假值。如果表达式为真,则 ! 运算符会使结果变为假,反之亦然。

在使用这些逻辑运算符时,需要注意以下几点:

  • 空格:在逻辑运算符和它们所连接的表达式之间必须有空格。例如,expr1 -a expr2 表示 expr1 AND expr2,而 expr1 && expr2 表示 expr1 AND expr2
  • 转义字符:在进行字符串比较时,由于 shell 中的某些字符(如 > 和 <)有特殊含义,因此需要使用转义字符 \ 来表示字符串中的这些字符。
  • test 命令test 命令用于评估表达式,并且可以与逻辑运算符结合使用来构建更复杂的条件。例如,test expr1 -a expr2 会检查 expr1 和 expr2 是否都为真。
  • [] 结构:除了 test 命令,还可以使用 [ ] 结构来进行条件测试。在这种结构中,逻辑运算符同样适用,例如 [ expr1 -a expr2 ]

 

三.数值比较

  • -eq:等于,用于检查两个数值是否相等。
  • -ne:不等于,用于检查两个数值是否不相等。
  • -gt:大于,用于检查一个数值是否大于另一个数值。
  • -lt:小于,用于检查一个数值是否小于另一个数值。
  • -ge:大于或等于,用于检查一个数值是否大于或等于另一个数值。
  • -le:小于或等于,用于检查一个数值是否小于或等于另一个数值。

在进行比较时,需要注意以下几点:

  1. 数据类型:确保进行比较的两个值是相同的数据类型,否则可能会出现意外的结果。
  2. 空格:在运算符和变量之间需要有空格,这是Shell脚本的语法要求。
  3. 引号:如果变量的值包含空格或其他特殊字符,需要在变量周围使用引号。
  4. 逻辑运算符:可以使用逻辑运算符如&&(与)、||(或)和!(非)来组合多个比较条件。

四.字符串比较

 

  • -n :检查字符串长度是否非零。
  • = :检查两个字符串是否相同。
  • != :检查两个字符串是否不同。
  • < :检查字符串是否小于另一个字符串,按照字典顺序进行比较。
  • > :检查字符串是否大于另一个字符串,按照字典顺序进行比较。
  • <= :检查字符串是否小于或等于另一个字符串,按照字典顺序进行比较。
  • >= :检查字符串是否大于或等于另一个字符串,按照字典顺序进行比较。

在进行字符串比较时,需要注意以下几点:

  • 引号:为了避免路径名扩展和单词拆分,建议在变量周围使用双引号。
  • 空格:在 [ ] 结构中,[ 后面和 ] 前面需要有空格。
  • 逻辑运算符:可以使用 &&(与)和 ||(或)来组合多个条件表达式。
  • 退出状态test 命令会根据比较的结果返回不同的退出状态,通常为 0(成功)或 1(失败)。

五.文件测试

  1. -e:检测文件或目录是否存在,如果存在则返回true。
  2. -f:检测是否为普通文件(非目录或设备文件),如果是则返回true。
  3. -d:检测是否为目录,如果是则返回true。
  4. -b:检测是否为块设备文件,如果是则返回true。
  5. -c:检测是否为字符设备文件,如果是则返回true。
  6. -x:检测文件是否可执行,如果是则返回true。
  7. -s:检测文件大小是否大于0,如果不为空则返回true。
  8. -r:检测文件是否可读,如果是则返回true。
  9. -w:检测文件是否可写,如果是则返回true。
  10. -L:检测文件是否存在且是符号链接,如果是则返回true。
  11. -n:检测给定的字符串是否非空,如果非空则返回true。
  12. -z:检测给定的字符串是否为空,如果为空则返回true。
  13. -a:与逻辑操作符,用于连接测试条件,当所有条件都为真时,返回true。
  14. -o:或逻辑操作符,用于连接测试条件,当任一条件为真时,返回true。
  15. !:非逻辑操作符,用于反转测试条件的真假值。

此外,还有一些用于比较两个文件的测试运算符:

  1. -nt:如果文件1新于文件2,则为true。
  2. -ot:如果文件1旧于文件2,则为true。
  • 21
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值