2011-06-23 8 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'を入れずに、ここにコマンドを置いて、' DELIMITER'だけをhere-docの後の行。ダッシュ( ' - DELIMITER')を追加すると先頭のタブを削除するように指示し、区切り文字を引用するとhere-docの' $ variable'式を置き換えません。あなたがループなしで動いた理由は、一行で区切り文字( 'ENDEXP')だけを見たことがないので、スクリプトの最後まで使いました。ループでは、それは 'done'コマンドを見つけることができず、パニックになりました。 –

0

あなたがhere-docを使用したいが、構文は少しオフになっているように私はそれを行うことになっているものを理解している場合、これは動作するはずです。..

+0

これはwhileループなしで機能します。 ./mysql_exe.sh 8104を実行すると、サーバ8104のスレーブステータスが取得されます。私はそれを自動化することはできません。 – Charlie

関連する問題