2016-07-26 128 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腳本一次。