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

检查Test.txt第4列值大于0时仅执行一次A.sh的问题求助

解决方案

修改后完整代码

# 初始化标记位,默认不存在符合条件的行
has_greater=0
# 注意修改读取的文件为你需要的Test.txt,原代码误写为Data.txt
while read -r mLine; do
  # 修复原代码cut分隔符缺少空格的错误
  mFld4=$(echo "${mLine}" | cut -d' ' -f4)
  # 数值比较使用-gt替代字符串比较符>
  if [[ ${mFld4} -gt 0 ]]; then
    has_greater=1
    # 匹配到第一条符合条件的行直接终止循环
    break
  fi
done < Test.txt

# 循环结束后统一执行一次对应脚本
if [[ ${has_greater} -eq 1 ]]; then
  ./A.sh
else
  ./B.sh
fi

核心修改说明

  • 新增标记位记录是否存在符合条件的行,匹配到第一行满足要求的记录后直接用break终止循环,避免无效遍历
  • 将脚本执行逻辑移到循环外部,确保无论有多少行符合条件,都只会执行一次对应脚本
  • 修复原代码的3个隐藏问题:
    1. 读取文件误写为Data.txt,修正为目标文件Test.txt
    2. cut -d''未指定空格分隔符,修正为cut -d' '
    3. 数值比较误用字符串比较符>,改用算术比较符-gt避免判断逻辑异常

更简洁的优化写法

可以直接用awk实现判断,执行效率更高:

if [[ $(awk '$4 > 0 {print 1; exit}' Test.txt) == 1 ]]; then
  ./A.sh
else
  ./B.sh
fi

内容的提问来源于stack exchange,提问作者Gene100

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:04