gpt4 book ai didi

linux - 计数.sh : line 13: syntax error near unexpected token `done'

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:53:40 28 4
gpt4 key购买 nike

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

最佳答案

您在 done 之前缺少一个 fi。您必须以 fi 结束 if 语句,然后通过 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,它只是字符串计数,不能添加到其他东西。
  • 需要在测试条件后加上;
  • 您需要引入一个带有thenelif block ,就像if block 本身一样。

关于linux - 计数.sh : line 13: syntax error near unexpected token `done' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10431485/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com