我得到;意外标记“完成”附近出现语法错误&引用;当我在bash中使用while循环时
我有一个文件,以流式方式逐行填写。我需要通过删除文件中最旧的记录来减少文件的容量。 我想计算行数,如果行数超过100,则删除最早的行。但是,我得到了以下错误:我得到;意外标记“完成”附近出现语法错误&引用;当我在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
./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
处理副本时将原始文件写入,则这些更改将丢失。@切普纳:感谢您提到这一点,您知道吗?写入文件的任何内容都需要负责对其进行修剪。@切普纳:不起作用!当我将其应用于流媒体文件,无法工作!:((