Bash脚本读取txt文件做整数比较 报算术运算符无效错误
问题原因
- 你的源文件为Windows编码格式,行尾携带不可见的
\r回车符,读取热度值时,temp变量末尾会附带这个字符,导致-gt整数比较操作无法识别为合法整数,触发integer expression expected报错。 - 你之前使用的
cut拆分字段的写法冗余,遇到格式异常行时容易出现空值,也可能引发额外报错。
修复步骤
先统一转换源文件的换行符为Unix格式,清理行尾
\r字符:
如果系统安装了dos2unix工具,直接执行:dos2unix homerseklettest3.txt
没有的话用sed也可以完成清理:sed -i 's/\r$//' homerseklettest3.txt优化脚本逻辑,直接通过
read指定分隔符拆分字段,同时增加数值合法性校验,避免异常行报错,修改后的完整脚本如下:
#!/bin/bash highestTemp=-10000 highestTempX=0 highestTempY=0 # 指定分隔符为逗号,直接拆分字段,不需要的日期、时间字段用_占位忽略 while IFS=, read -r x y _ _ temp do # 先校验temp为纯整数再执行比较,避免异常值报错 if [[ "$temp" =~ ^[0-9]+$ && "$temp" -gt "$highestTemp" ]] then highestTemp=$temp highestTempX=$x highestTempY=$y fi done < homerseklettest3.txt echo "Highest Temperature: $highestTemp Coordinates: $highestTempX $highestTempY"
运行结果
执行修改后的脚本即可得到预期输出:
Highest Temperature: 120 Coordinates: 92.7418529 99.9999999
内容的提问来源于stack exchange,提问作者SnowballAvocado
相关产品推荐
相关产品推荐

