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

Bash脚本读取文件三元组行比较score时算术语法错误排查

解决Bash脚本分数比较的算术语法错误问题

问题原因

报错的核心原因是目标文件使用了Windows风格的换行符(CRLF,即\r\n),导致读取的$score变量末尾带有隐藏的\r字符。比如实际读取到的不是90,而是90\r,Bash在解析[[ $score -gt 50 ]]时,会把\r当成语法的一部分,从而抛出"invalid arithmetic operator"错误。

可以用以下命令验证:

cat -v StudentThatCompletedtheExam.txt

如果每行末尾显示^M,就说明是换行符的问题。

解决方案(保留初学者易懂的写法)

方案1:先转换文件为Unix风格换行符

直接把目标文件的换行符改成Unix格式(\n),之后脚本就能正常运行:

# 转换文件换行符(需要安装dos2unix工具)
dos2unix StudentThatCompletedtheExam.txt

如果没有dos2unix,也可以用sed命令:

sed -i 's/\r$//' StudentThatCompletedtheExam.txt

方案2:在脚本中处理score变量

不想修改原文件的话,在读取score后,用参数扩展去掉末尾的控制字符:

#!/bin/bash

while read nom; do
    read pren
    read score
    # 去掉score末尾的所有控制字符(包括\r)
    score=${score%%[[:cntrl:]]}
    if [[ $score -gt 50 ]]; then
        echo $nom
        echo $pren
        echo $score  
    fi
done < "StudentThatCompletedtheExam.txt"

另外,原脚本里的nomFich="fichier.txt"和n=$(sort $nomFich | uniq | wc -l)完全没用到,可以直接删除,避免代码冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:12:12