如何在Bash的if语句中用AND运算符判断两个变量的算术条件
Bash脚本中数值比较条件不生效的问题修复
你的问题出在数值比较的运算符使用错误:在[[ ]]结构中,<=和<是用于字符串ASCII码比较的运算符,而非数值大小比较。比如当num1是"24"时,字符串比较"24" <= "24"是成立的,但如果num1是"5",字符串比较"5" <= "24"会因为"5"的ASCII码比"2"大而判断为假,这显然不符合你的数值比较需求。
正确的实现方式有两种:
方法1:在[[ ]]中使用bash数值比较运算符
bash提供了专门的数值比较选项:
-le:小于等于(对应<=)-lt:小于(对应<)
修正后的判断语句:
if [[ $num1 -le 24 && $num2 -lt 2 ]]; then echo "something to print" exit 1 fi
方法2:使用算术表达式(( ))
(( ))是bash的算术扩展结构,支持直接用<=、<等数值比较符号,逻辑与用&&:
if (( num1 <= 24 && num2 < 2 )); then echo "something to print" exit 1 fi
额外优化建议
你的代码里通过写入文件再读取的方式处理字符串完全没必要,可以直接对变量进行操作,简化代码:
#!/bin/bash NEW_BR_NAME=$1 TAG=$2 j_name=$3 brname=${NEW_BR_NAME:0:8} # 直接截取前8个字符,替代写入文件再cat+cut的操作 if [[ "$j_name" == "git" ]]; then grep -q "ABC3" <<<"$NEW_BR_NAME" && echo "Its ABC3" # 直接用here string传递内容给grep,不用文件 read num1 num2 <<<${brname//[^0-9]/ } echo "num1=$num1 num2=$num2" # 二选一使用上面的正确判断语句 if (( num1 <= 24 && num2 < 2 )); then echo "something to print" exit 1 fi fi
这样既解决了条件判断的问题,又简化了代码逻辑,避免不必要的文件IO操作。
内容的提问来源于stack exchange,提问作者Aditi
相关产品推荐
相关产品推荐

