【发布时间】:2016-05-02 03:58:21
【问题描述】:
在这个shell代码中,我不知道为什么总是说我有语法错误,我使用这个函数来计算行号的中位数和平均值。
rows()
{ echo -e "Average:\tMedian:";
while read line
do
array=($line)
lineavg=0;
linemed=0;
medpos=0;
for((i=0;i<${#array[@]};i++))
do
let "lineavg+=${array[$i]}"
done
cols=${#array[@]}
let "lineavg=$lineavg+($cols/2)"
let "$lineavg/=$cols"
let "medpos=($cols/2)"
sorted=($(printf '%s\n' "${array[@]}"| sort -g))
if [ $((cols%2)) -eq 0 ]; then
let "medpos--"
if [[ "array[$medpos]"<"array[medpos+1]" ]]; then
let "medpos++"
fi
fi
let "linemed=${sorted[$medpos]}"
echo -e $lineavg '\t\t' $linemed
done<$inputfile
}
【问题讨论】:
-
Where 是说你有语法错误吗?尝试创建minimal reproducible example。
-
它说在 "cols=${#array[@]}" 和 let "medpos=($cols/2)" 之间
-
显示运行此函数的 exact 错误输出。这是
bash或/bin/sh还是其他shell? -
这样的确切错误:平均:中位数:test1.sh:第 27 行:cols=0:找不到命令 test1.sh:第 29 行:让:lineavg=0+(/2):语法错误:预期操作数(错误标记为“/2)”) test1.sh:第 30 行:让:0/=:尝试分配给非变量(错误标记为“/=”) test1.sh:第 31 行:让: medpos=(/2): 语法错误:操作数预期(错误标记是“/2)”) test1.sh:第 39 行:let:linemed=:语法错误:操作数预期(错误标记是“=”)跨度>
-
部分脚本中可能的 DOS 行结尾?
标签: shell