0

我被要求编写一个 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"
4

2 回答 2

5

fidone. 您必须if以 a 结束语句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是 like 12 ./filename,因此要仅使用行数,您必须提取它。我用于cut那个目的。
  • let命令要求您实际添加文字值或变量。因此,您需要使用$count而不只是count,这只是字符串计数,不能添加到其他内容中。
  • 你需要把;测试条件放在后面。
  • 你需要引入一个elif带有 的块then,就像if块本身一样。
于 2012-05-03T12:35:30.187 回答
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
于 2012-05-03T12:37:41.050 回答