如何让Shell循环在FILE.TXT行数<3时自动终止,无需Ctrl+C?
解决方法:在循环中检查文件行数并自动退出
当然可以实现自动中断!我们只需要在每次执行完R_START后,检查FILE.TXT的剩余行数,当行数少于3时主动退出循环就行。
修改后的循环脚本如下:
while true; do # 执行你的处理脚本 /usr/bin/R_START # 获取当前文件的行数(用重定向避免wc输出文件名,结果更干净) line_count=$(wc -l < FILE.TXT) # 判断行数是否小于3,满足条件则退出循环 if [ "$line_count" -lt 3 ]; then echo "检测到FILE.TXT剩余行数为$line_count(少于3行),自动退出循环" break fi # 保留原有的休眠间隔 sleep 0.1 done
细节补充说明:
wc -l < FILE.TXT:这个命令会直接返回文件的行数,用重定向<是为了让wc只输出数字,不会附带文件名,方便后续数值比较。[ "$line_count" -lt 3 ]:这是Bash的数值比较语法,-lt表示“小于”,当行数小于3时触发break语句退出循环。- 如果担心
R_START处理完所有行后直接删除了FILE.TXT,可以额外加一个文件存在性检查,让逻辑更健壮:
while true; do /usr/bin/R_START # 先检查文件是否存在,不存在直接退出 if [ ! -f FILE.TXT ]; then echo "FILE.TXT已不存在,自动退出循环" break fi line_count=$(wc -l < FILE.TXT) if [ "$line_count" -lt 3 ]; then echo "检测到FILE.TXT剩余行数为$line_count(少于3行),自动退出循环" break fi sleep 0.1 done
你只需要把这个逻辑复制到另外3个类似的循环中,替换对应的FILE.TXT和R_START脚本路径,就能实现所有循环自动终止,不用再手动按Ctrl+C啦!
内容的提问来源于stack exchange,提问作者logvca
相关产品推荐
相关产品推荐

