2015-08-21 5 views
1

Я хочу создать бот teampeak, и у меня есть этот скрипт, чтобы начать это.Ошибка синтаксиса: неожиданный конец файла. Bash

#!/bin/bash 
    if [ $1 = 'stop' ] 
     then 
     echo stop >> /root/ts3bot/tmp/log.txt 
     date >>/root/ts3bot/tmp/log.txt 
     echo ====================== 
     screen -S bot -X quit 
     fi 

    if [ $1 = 'start' ] 
     then 
     echo start >> /root/ts3bot/tmp/log.txt 
     date >> /root/ts3bot/tmp/log.txt 
     echo ====================== 
     screen -dmS bot php core.php 
     ps ax | grep -v grep | grep -v -i SCREEN | grep links >> /root/ts3bot/tmp/log.txt 
    fi 
    <here is an extra blank line> 

но когда я типа bash bot.sh это говорит syntax error: unexpected end of file я не знаю, что я сделал неправильно:/CHMOD устанавливается на 755

Спасибо!

+1

Вставка кода в http://www.shellcheck.net/ показывает некоторые ошибки. Вы можете проверить это, прежде чем идти дальше – fedorqui

+0

@fedorqui: помимо двойных кавычек вокруг '$ 1' и предложения использовать' pgrep', shellcheck.net возвращает ложные ошибки. –

+0

Проверьте свой файл для специальных символов: 'cat --show-nonprinting bot.sh' – Cyrus

ответ

2

Я подозреваю, что вы скопировали этот сценарий оболочки из коробки Microsoft Windows на сервер Linux или Unix. Если это так, проблема может заключаться в том, что у вас заканчиваются строки DOS/Windows, что может привести к непредсказуемым результатам в сценариях.

Чтобы проверить сценарий для плохих окончаний строк на сервере Linux или Unix, вы можете сбросить файл (вроде как шестнадцатеричный дамп), введя следующую команду в командной строке:

$ od -c bot.sh | less 

И смотреть для \n или \r или \r\n. Если линии, похоже, имеют \r в конце, то вы нашли проблему.

Чтобы исправить эту проблему, вы можете использовать такой инструмент, как dos2unix, если он установлен в вашей системе. Если у вас нет dos2unix, но вы на сервере Linux, вы можете быть в состоянии сделать это вместо:

$ sed -i 's/\r//' bot.sh 

для преобразования файла.

Наконец-то ... см. Первую строку сценария, #!/bin/bash? Из-за этого вам не нужно запускать это с помощью bash bot.sh, вы можете просто выполнить его непосредственно с помощью ./bot.sh.

+0

Я могу подтвердить, что использование окончаний строки DOS создает синтаксическую ошибку. –

+0

'cat -vet' также работает, чтобы увидеть реальный формат – fedorqui

Смежные вопросы