2016-09-28 6 views
2

curlを使用してURLを実行する必要があり、出力に「hello」文字列が含まれている場合、シェルスクリプトから正常に終了します。その文字列がまだ含まれていない場合は、エラーメッセージを表示して終了します。特定の期間内に特定の時間内にcurlを呼び出す

私は、スクリプトの下になったが、私は、午前8時まで、ループしながら実行し、まだカール出力が「こんにちは」の文字列が含まれていない場合、方法を理解することはできませんよ?それは3時以降であれば

#!/bin/bash 

while true 
do 
    curl -s -m 2 "some_url" 2>&1 | grep "hello" 
    sleep 15m 
done 

それでは午前8時まで、カールコールを作り始めると、それはそのカールコールが「こんにちは」の文字列、エラーメッセージで午前8時出口成功した後にそれ以外の出口を与えることで成功した場合。

午後3時より前の場合は、午後3時を過ぎるまで寝ています。

スクリプト内でこのロジックを追加する必要があり、ここではcronを使用できません。

答えて

1

あなたはこの場合GNU date

#/bin/bash 

retCode=0          # Initializing return code to of the piped commands 
while [[ "$(date +"%T")" < '08:00:00' ]];  # loop from current time to next occurence of '08:00:00' 
do 
    curl -s -m 2 "some_url" 2>&1 | grep "hello" 
    retCode=$?         # Storing the return code 
    [[ $retCode ]] && break     # breaking the loop and exiting on success   
    sleep 15m         
done 

[[ $retCode -eq 1 ]] && echo "String not found" >> /dev/stderr # If the search string is not found till the last minute, print the error message 
+0

でテストスクリプトを使用することができるようなことがあり、それが午前8時の右になるまで、whileループでループし続けるのだろうか?それが成功するとすぐにできるだけ早く退場することができます。それが成功しない場合は、午前8時まで試し続けて、ゼロ以外のステータスコードとエラーメッセージで終了してください。 – user1950349

+0

@ user1950349:私のアップデートを参照してください。成功すると終了するように変更が加えられました。エラーが発生した場合はエラーメッセージが表示されます。最後の行を参照してください。 – Inian

+0

whileループで 'break'を使うのではなく、' exit 0'を使うと同じことになりますか?また、最後の行で 'exit 2'のような非ゼロステータスコードでエラーメッセージを出力しなければならない場合は、どうすればいいでしょうか? – user1950349

1

date +%kを使って現在の時間を取得し、午前8時から午後13時まで比較することができると思います。コードは次のように、これは

hour=`date +%k` 
echo $hour 
if [[ $hour -gt 15 || $hour -lt 8 ]]; then 
    echo 'in ranage' 
else 
    echo 'out of range' 
fi 
関連する問題