2016-07-26 4 views
0

저는 bash 스크립팅을 처음 접했고, 기꺼이 배우려고합니다. 나는이 bash는 코드를 실행하면Bash - while 루프 구문 오류

는 :

#!/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 셸에서도이를 재현 할 수 없습니다. 스크립트에 더 많은 것이 있습니까, 아니면 스크립트에 DOS 줄 끝이 있습니까? (아마도 그렇게 보이지는 않을 것입니다 만, 때로는 그러한 결말의 오류를 예측하기가 어렵습니다.) – chepner

+1

또한 재생산 할 수 없습니다. 무슨 배쉬를 사용하고 있습니까? 여기에 임의의 제안이 있습니다. bash의 줄 끝에서 세미콜론이 필요하지 않습니다. 어쩌면'done' 다음에 세미콜론을 없애고 도움이되는지 확인하십시오. –

+0

이것을 재현 할 수 있습니다. 다음 명령의 결과를 보여 줄 수 있습니까? cat pokecli.py –

답변

-2

7.3 샘플

동안 당신은 필요하지 않을 것 세미콜론이
#!/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 
    COUNTER=0 
    while [ $COUNTER -lt 10 ]; do 
     echo The counter is $COUNTER 
     let COUNTER=COUNTER+1 
    done 

그래서 당신은 변경해야합니다. 또한 중첩 된 명령 들여 쓰기를 시작하고 가독성을 위해 잠시 동안 같은 줄에 do 명령을 추가해야합니다. 또한 "사실"은 위험 할 수 있으며 "수면"이 더 좋습니다.

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

그러나 그 중 아무 것도 오류를 일으키지 않습니다. 대부분 당신은 do을 타이핑했거나, 주석 처리했거나,^M과 같이 "할"전에 Windows (또는 다른 특수 문자)를 가지고있을 가능성이 큽니다. dos2unix 명령을 사용하면 도움이됩니다.

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

다시 chmod +x 스크립트로해야합니다.