count.sh:第13行:意外令牌"完成"附近的语法错误

0 linux shell

我要求编写一个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"
Run Code Online (Sandbox Code Playgroud)

Chr*_*n.K 5

fi之前错过了done.你必须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
Run Code Online (Sandbox Code Playgroud)

此外,它可能只是一个复制/粘贴错误,但在您的代码/脚本结束时,您完全错过了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
Run Code Online (Sandbox Code Playgroud)

修正:

  • 输出wc -l就像12 ./filename,所以只使用行数,你必须提取它.我用于cut那个目的.
  • let命令要求您实际添加文字值或变量.所以你需要使用$count而不仅仅是count,这只是字符串数,不能添加到其他东西.
  • 你需要;在测试条件之后.
  • 你需要引入一个elif带有a 的块then,就像if块本身一样.