检查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个隐藏问题:
- 读取文件误写为
Data.txt,修正为目标文件Test.txt cut -d''未指定空格分隔符,修正为cut -d' '- 数值比较误用字符串比较符
>,改用算术比较符-gt避免判断逻辑异常
- 读取文件误写为
更简洁的优化写法
可以直接用awk实现判断,执行效率更高:
if [[ $(awk '$4 > 0 {print 1; exit}' Test.txt) == 1 ]]; then ./A.sh else ./B.sh fi
内容的提问来源于stack exchange,提问作者Gene100
相关产品推荐
相关产品推荐

