2016-09-28 35 views
2

我必须使用curl执行一个URL,如果输出包含“hello”字符串,那么我将成功退出shell脚本,否则我会一直重试直到上午8点如果它仍然不包含该字符串,则会返回错误消息。在一天之内的特定时间段内调用curl

我得到了下面的脚本,但我无法理解我如何可以运行while循环到上午8点,如果仍然卷曲输出不包含“你好”字符串?

#!/bin/bash 

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

所以,如果它是下午3点后,然后开始制作卷曲调用,直到上午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

测试在这种情况下,它会不断循环在while循环,直到上午8点是正确的?我们能否尽快退出?如果不成功,那么请继续尝试到上午8点,然后以非零状态码退出并显示错误消息? – user1950349

+0

@ user1950349:请参阅我的更新,完成所做的更改以成功退出,并在错误消息已打印失败时引用最后一行。 – Inian

+0

一个基本的东西,而不是在while循环中使用'break',如果我使用'exit 0',那么它会是同样的事情?并且在最后一行中,如果我必须退出非零状态代码(例如“退出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 
相关问题