2017-07-07 10 views
0

メールを送信することなく、ループの外に壊しbashスクリプトは、私はbashの中の小さなスニペットを持って

retries = 3 

for ((i=0; i<retries; i++)); do 
    curl -1 --cipher ALL --connect-timeout 90 -T $zip_name ftps://ftp.box.com/Backup/$zip_name --user [email protected]:§fHyFSDF$o6 
    [[ $? -eq 0 ]] && break 
    echo "something went wrong, let's wait 6 seconds and retry" 
    sleep 6 
done 

[[ $retries -eq i ]] && { echo "This email is a notification of Failure" | mail -s "Failed" "[email protected]" ; exit 1; } 

カールエラーがアップし、それが来るので、もし、カールをやってエラーが発生した場合は、上記のループが3回を再試行する必要があります電子メールにメールする必要があります。しかし、それをテストするために私は、ユーザーのアクセスを取り消すので、私は、電子メールを期待したが、これは動作しませんでしたし、私は、コンソール上で、次の受信:

% Total % Received % Xferd Average Speed Time Time  Time Current 
           Dload Upload Total Spent Left Speed 
    0  0 0  0 0  0  0  0 --:--:-- 0:00:03 --:--:--  0 
curl: (9) Server denied you to change to the given directory 

なぜコードの断線があればアクセスした場合、最初の試みであります構文場合は、サーバー

+0

https://www.gnu.org/software/bash/manual/html_node/Quoting.html#Quoting – hek2mgl

+0

@ hek2mglあなたは何を言いたいのか詳しく説明できますか? ? – Kittystone

+0

私は、(a)変数と(b)特殊文字を含む文字列を引用する必要があると言いました。あなたのコードに引用符は見えません。 – hek2mgl

答えて

0
retries = 3 

for ((i=0; i<$retries; i++)) 
do 
    curl -1 --cipher ALL --connect-timeout 90 -T $zip_name 
ftps://ftp.box.com/Backup/$zip_name --user [email protected]:§fHyFSDF$o6 
    if [[ $? -eq 0 ]] 
    then   
     break 
     echo "something went wrong, let's wait 6 seconds and retry" 
     sleep 6 
    fi 
done 

if [[ $retries -eq $i ]] 
then 
    echo "This email is a notification of Failure" | mail -s "Failed" "[email protected]" 
    exit 1 
fi 

をアップロードから取り消さあなたが使用してオフに優れていると思うし、私はあなたが正しくリトライ変数に言及されていないことに気付きました。再試行と$ iの代わりに$再試行で$

+0

私もあなたの変更を試みた..エラーが残りますまったく同じ。なぜカールは壊れていて、どうして起こっていないのですか? – Kittystone

+0

curlコマンドが初めて成功した場合、ループは中断されますが、再試行回数が0になるだけで電子メールは送信されませんでしたか? –

+0

はい。リタイアを試みた場合は、4回目の再試行後に中断してからメールを送信してください。 – Kittystone

関連する問題