You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:32:06