我要求编写一个shell脚本来计算行数 在当前目录中的所有“.cpp”中。
但是,在运行我的shell脚本时,
它说count.sh: line 13: syntax error near unexpected token "done"
我不知道出了什么问题。
#!/bin/bash
summary=0
for i in $(find . -name *.cpp -print)
do
count=$(wc -l $i)
let summary+=count
if [$count -eq 1]
then
echo "$i : $count line"
elif [$count -gt 1]
echo "$i : $count lines"
done
if [$summary -eq 1]
then
echo "TOTAL: $summary line"
elif [$summary -gt 1]
echo "TOTAL: $summary lines"
答案 0 :(得分:5)
您在fi
之前错过了done
。您必须使用if
结束fi
语句,然后使用done
结束for
循环。
示例: UPDATE 以下示例并非使此脚本正确所需的全部内容。我把它留在这里,因为这是OP看到的“初始”错误的原因。继续阅读以获得更多修复。
for i in $(find . -name *.cpp -print)
do
count=$(wc -l $i)
let summary+=count
if [$count -eq 1]
then
echo "$i : $count line"
elif [$count -gt 1]
echo "$i : $count lines"
fi
done
此外,它可能只是一个复制/粘贴错误,但在您的代码/脚本的末尾,您完全错过了fi
。
您的脚本中有一些错误。首先,这是正确的版本:
for i in $(find . -name *.cpp -print)
do
count=$(wc -l $i | cut -f1 -d' ')
let summary+=$count
if [ $count -eq 1 ];
then
echo "$i : $count line"
elif [ $count -gt 1 ];
then
echo "$i : $count lines"
fi
done
修正:
wc -l
的输出与12 ./filename
类似,因此要仅使用行数,您必须提取它。我为此目的使用了cut
。let
命令要求您实际添加文字值或变量。因此,您需要使用$count
而不仅仅是count
,这只是字符串计数,无法添加到其他内容中。;
。elif
引入then
块,就像if
块本身一样。答案 1 :(得分:0)
if [$count -eq 1]
then
echo "$i : $count line"
elif [$count -gt 1]
echo "$i : $count lines"
done
应该是
if [$count -eq 1]
then
echo "$i : $count line"
elif [$count -gt 1]
echo "$i : $count lines"
fi # << this line is new
done