2011-06-23 68 views
0

everyone。bash:./mysql_exe.sh:第13行:語法錯誤:文件意外結束

我是一個bash腳本noob,我無法弄清楚爲什麼我得到意外的文件錯誤結束。

這是我的腳本:

#!/bin/bash 

server=8100 

while [ $server -le 8121 ] 
do 
     ssh pos$server <<ENDEXP 
     mysql -u root -p12345 pos_master_prod <<ENDEXP 
     show slave status \G <<ENDEXP 
     \q <<ENDEXP 
     server=$(($server + 1)) 
done 

任何想法?

謝謝!

回答

2

如果我沒有理解什麼是應該做的,這應該工作:

#!/bin/bash 

for ((server=8100; server <= 8121; server++)); do 
    ssh pos$server <<-ENDEXP 
     mysql -u root -p12345 pos_master_prod 
     show slave status \G 
     \q 
    ENDEXP 
done 

(注:一定要發送到遠程服務器的行是用製表符縮進的,而不是空格; <<-刪除了前導製表符,但不包括其他形式的縮進。)

+0

是的!那樣做了!非常感謝!你能解釋我的錯在哪裏,所以我更好地理解爲什麼我的腳本不起作用? 再次,謝謝! – Charlie

+0

只是看起來真的很糟糕的語法。 :) – Charlie

+0

@SquireCD:你遇到的唯一問題是這裏的文檔語法:不要在每一行放置''DELIMITER',把它放在here-doc之前的命令上,然後把'DELIMITER'單獨放在一個在here-doc之後。添加短劃線('<< - DELIMITER')會告訴它刪除前導標籤,並且引用分隔符將使其不會替換here-doc中的'$ variable'表達式。你在沒有循環的情況下工作的原因是,它從來沒有在一行中看到單獨的分隔符('ENDEXP'),所以它只用於腳本的末尾。隨着循環,這意味着它無法找到'完成'的命令,並驚慌失措。 –

0

看起來你想使用here-doc但語法是有點過了..

+0

這個工作方式沒有while循環。 如果我做./mysql_exe.sh 8104,它會得到服務器8104的奴隸狀態。我似乎無法讓它自動化。 – Charlie

相關問題