我得到;意外标记“完成”附近出现语法错误&引用;当我在bash中使用while循环时

我得到;意外标记“完成”附近出现语法错误&引用;当我在bash中使用while循环时,bash,file,while-loop,Bash,File,While Loop,我有一个文件,以流式方式逐行填写。我需要通过删除文件中最旧的记录来减少文件的容量。 我想计算行数,如果行数超过100,则删除最早的行。但是,我得到了以下错误: ./1.sh: line 18: syntax error near unexpected token `done' ./1.sh: line 18: `done' 这是我的密码: #!/bin/bash FILE="11.txt" linenum=0 while true; do #Count number of lines li

我有一个文件,以流式方式逐行填写。我需要通过删除文件中最旧的记录来减少文件的容量。 我想计算行数,如果行数超过100,则删除最早的行。但是,我得到了以下错误:

./1.sh: line 18: syntax error near unexpected token `done'
./1.sh: line 18: `done'
这是我的密码:

#!/bin/bash
FILE="11.txt"
linenum=0

while true; do

#Count number of lines
linenum=`cat "$FILE" | wc -l`

while [ $linenum -gt 100 ] do

#Delete the head of file (oldest)
sed -i 1,1d "$FILE"

#Count number of lines
linenum=`cat "$FILE" | wc -l`

done

done

你能帮我吗?

你需要一个换行器或
while
的状态和
do
之间的code>:

while [ $linenum -gt 100 ]; do

    #Delete the head of file (oldest)
    sed -i 1,1d "$FILE"

    #Count number of lines
    linenum=$(wc -l "$FILE")

done

我还正确地缩进了代码,将subshell
```
符号更改为更现代的
$(…)
,并删除了对
cat的冗余使用

您需要换行符或
while
的状态和
do
之间的code>:

while [ $linenum -gt 100 ]; do

    #Delete the head of file (oldest)
    sed -i 1,1d "$FILE"

    #Count number of lines
    linenum=$(wc -l "$FILE")

done

我还正确地缩进了代码,将subshell
```
符号更改为更现代的
$(…)
,并删除了对
cat

的冗余使用。您漏掉了下面一行的分号

while [ $linenum -gt 100 ] do
应该是

while [ $linenum -gt 100 ] ; do

希望这有帮助。

您错过了下一行的分号

while [ $linenum -gt 100 ] do
应该是

while [ $linenum -gt 100 ] ; do

希望这有帮助。

这不安全
sed-i
(有效)复制输入文件,然后用修改后的副本替换原始文件。如果在
sed
处理副本时将原始文件写入,则这些更改将丢失。@切普纳:感谢您提及这一点,您知道吗?写入文件的任何内容都需要负责对其进行修剪。@切普纳:不起作用!当我将其应用于流文件时,它无法工作!:((这不安全。
sed-i
(有效)制作输入文件的副本,然后用修改后的副本替换原始文件。如果在
sed
处理副本时将原始文件写入,则这些更改将丢失。@切普纳:感谢您提到这一点,您知道吗?写入文件的任何内容都需要负责对其进行修剪。@切普纳:不起作用!当我将其应用于流媒体文件,无法工作!:((