2016-07-26 100 views
0

我是新来的bash脚本和atm我试图学习它。Bash - 虽然循环语法错误

当我运行此庆典代码:

#!/bin/bash 
while true 
do 
./pokecli.py 
echo ">pokecli exited... restarting..."; 
sleep 5; 
done;  

我收到此错误:

opt/PokemonGo-Bot# ./start.sh       ./start.sh: line 6: syntax error near unexpected token  `done' 
./start.sh: line 6: `done;' 

任何帮助表示赞赏

+3

我无法在任何POSIX shell中重现此操作。是否有更多的脚本,或者脚本是否有DOS行结尾? (这看起来不太可能,但是有时候很难预测这样的结局会产生什么样的错误。) – chepner

+1

也不能重现。你用什么bash?这是一个随机的建议:你不需要在bash中的结尾处使用分号。也许在完成后摆脱分号,看看是否有帮助。 –

+0

可以重现这一点。你能告诉我下面的命令的结果吗 cat pokecli.py –

回答

-2

正确的语法是

7.3虽然样本

 #!/bin/bash 
    COUNTER=0 
    while [ $COUNTER -lt 10 ]; do 
     echo The counter is $COUNTER 
     let COUNTER=COUNTER+1 
    done 

所以要

#!/bin/bash 
while true; do 
    ./pokecli.py 
    echo ">pokecli exited... restarting..."; 
    sleep 5; 
done 
+0

http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-7.html – Pietro

+3

将'do'放在下一行上没有任何问题;分号或';'将终止它之前的命令。其他分号是多余的,但无害。 – chepner

0

你必须在那里它不需要分号,你应该改变。另外,你应该开始缩进嵌套命令,并且为了可读性将它们放在同一行。另外,“虽然真实”可能是危险的,而“睡觉”更好。

#!/bin/bash 
while sleep 5; do 
    ./pokecli.py 
    echo ">pokecli exited... restarting..." 
done 

但是,这就是说 - 没有一个会导致错误。最有可能的是,你要么输错你的do,评论它,或者在“做”之前有(很可能)有一个Windows(或其他特殊)字符,就像^ M或类似的字符。 dos2unix命令可能会有所帮助,或者运行该命令。

tr -cd '[:graph:]\n\t ' <start.sh >file.tmp && mv file.tmp start.sh

你必须chmod +x脚本一次。