语法错误,不确定其含义或解决方法

时间:2019-02-25 03:15:51

标签: bash shell

我正在尝试为学校编写一个Shell脚本,以在整个主目录中搜索所有扩展名为.java的文件。对于每个此类文件,请列出文件中的行数及其位置(即其完整路径)。

我的脚本看起来像

#!/bin/bash
total=0
for currfile in $(find ~ -name "*.java" -print)
do
    total=$[total+($(wc -l $currfile| awk '{print $1}'))]
    echo -n 'total=' $total
    echo -e -n '\r'
done
echo 'total=' $total

当我从Konsole运行它时,出现错误

./fileQuest.sh: line 5: total+(): syntax error: operand expected (error token is ")")

我是新手,无法弄清楚错误告诉了我什么。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

total+()

这是正在$[...]内部求值的表达式。请注意,括号为空。那里应该有一个数字。它表明$(wc | awk)位正在产生一个空字符串。

total=$[total+($(wc -l $currfile| awk '{print $1}'))]
#              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

如果该部分为空白,则会得到:

total=$[total+()]

请注意,wc可以本地处理多个文件名。您不需要编写自己的循环。您可以改用find -exec直接调用它。

find ~ -name "*.java" -exec wc {} +