当我运行我的testing.sh文件
时#!/bin/bash
FILE=$1
COUNT=0
while read -r SID FIRST LAST S1 S2 S3
do
SUM=$(expr $S1 + $S2 + $S3)
AVG=$(expr $SUM / 3)
printf '%d [%d] %s, %s\n' "$AVG" "$SID" "$LAST" "$FIRST"
done < "$FILE" | sort -k 3,3n -k 4,4n -k 2,2g
我收到以下错误。
expr: non-integer argument
expr: syntax error
我不确定我做错了什么。我也试过echo,awk和bc,但我对所有这些都有类似的错误。
我像这样运行文件:
/testing.sh /home/user/Desktop/sample.txt
这是示例文本。
123456789 Lee Johnson 72 85 90
999999999 Jaime Smith 90 92 91
888111818 JC Forney 100 81 97
290010111 Terry Lee 100 99 100
199144454 Tracey Camp 77 84 84
299226663 Laney Camp 70 74 71
434401929 Skyler Camp 78 81 82
928441032 Jess Forester 85 80 82
928441032 Chris Forester 97 94 89
当我运行程序时,这应该是输出:
71 [299226663] Camp, Laney
80 [434401929] Camp, Skyler
81 [199144454] Camp, Tracey
93 [928441032] Forester, Chris
82 [928441032] Forester, Jess
92 [888111818] Forney, JC
82 [123456789] Johnson, Lee
99 [290010111] Lee, Terry
91 [999999999] Smith, Jaime
答案 0 :(得分:4)
您的S3
实际上并不包含90
之类的值,而是包含90$'\r'
等值,因为您的输入文件具有CRLF(DOS)而不是LF(UNIX)换行。如果您从非UNIX系统获取输入文件,则最常发生这种情况。
使用dos2unix
或vim命令:set fileformat=unix
等工具修复文件,或在脚本中使用类似于以下内容的代码:
S3=${S3%$'\r'} # remove any trailing $'\r' from S3