Shell - 表达式中的语法错误(错误标记为“16”)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell - 表达式中的语法错误(错误标记为“16”)相关的知识,希望对你有一定的参考价值。

我正在为我的大学做一个项目,这是我第一次使用Bash进行编码。

我正在尝试浏览.text文档,阅读每一行,并获取我需要的信息。

.txt文档看起来像这样:

83210:Henrique Gaspar:EIB2:911235444:metas@gmail.com:car:BMW:82-RX-14:5:25:26 88110:Vasco Rapido:IB2:962222222:vrapid@gmail.com:motorbike:BMW:33 -MT-99:3:5:16 88020:Maria Aguiar:EIB2:911555444:mguiar@gmail.com:car:mercedes:88-TX-11:2:20:12

而对于我正在做的事情,我需要计算每个用户的最后一个数字的总和,所以26 + 16 + 12。

现在,这是我的代码:

#!/bin/bash
echo -n "Nº de condutores: "
echo $(cat condutores.txt | wc -l)
echo -n "Nº de passageiros: "
echo $(cat passageiros.txt | wc -l)
echo -n "Saldo total dos condutores: "
x=0
linhas=$(cat condutores.txt | wc -l)
i=0
while [[ $i -le $linhas ]]; do
    sum=$(cat condutores.txt | head -$i | tail -$(( $linhas + 1 - $i )) | cut -d':' -f11)
    x=$((x+sum))
    i=$((i+1))
done
echo "$x"

我在这里完整地写了它,所以没有错过任何东西。

这里问题的关键是从第7行到第15行。我不知道这是否是我通过condutores.txt文件或任何其他内容的每一行的方式。但是我收到了这个错误:

Saldo total dos condutores: ./stats.sh: line 12: 26
16: syntax error in expression (error token is "16")
26

因此,由于某种原因,它只读取.txt文档的第一行和第二行,但无法计算总和,有人可以帮我吗?提前致谢。

答案

您的$ sum包含多行,因此不能将其解释为数字。而你的文本处理循环是一场噩梦,有一个更清洁的解决方案。看:

x=0
while IFS=: read -r a b c d e f g h i j k; do
    x=$((x+k))
done < condutores.txt
echo "$x"

以上是关于Shell - 表达式中的语法错误(错误标记为“16”)的主要内容,如果未能解决你的问题,请参考以下文章

我在将我的 bash 命令转换为 shell 脚本中的 shell 脚本语法错误时遇到错误

为啥我在意外标记 `(' 附近出现语法错误

构建步骤“执行 shell”在 Jenkins CI 上将构建标记为失败,没有任何错误

02 vue 数据绑定与指令

Basic Visual Basic 程序错误 - 可能是变量/语法错误(标记为 Fat)

shell中的for循环出现语法错误(syntax error: bad for loop variable)