在while循环中调用Bash函数

时间:2015-01-02 23:05:06

标签: bash while-loop

我制作了这个脚本,检查以确保创建离岸脚本。我工作正常& emdash;我提出了一个功能,使它更清洁。但我认为这个功能不起作用,因为它会在几秒钟内同时打印出来。

#!/bin/bash
#set -x
check_offshore ()
{
    local RESULTS
    RESULTS=$(ssh -q -T casper@mybox "ls -ltr  /come/and/play/with/us/danny/DropBox| grep foreverr_and_$today.csv")
    rc=$?
}

today=$(/bin/date +%Y%m%d)
time=$(/bin/date +"%T.%3N")
iterate=0
while [ $iterate -le 5 ]
do
     check_offshore
     if [[ $rc != 0 ]] ; then
        echo "$time foreverr_and_$today.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox"
        fi
     sleep 5
     iterate=$((iterate+1 ))
     done

这是它创建的日志& emdash;日志时间永远不会改变。它始终如一,永远存在,直到脚本停止。

17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox

什么事,我该如何解决?

1 个答案:

答案 0 :(得分:3)

请注意,问题与此功能无关;麻烦在于循环及其周围环境。

由于您没有在循环中设置time=$(...),您希望它如何改变?

修改循环,以便在每次迭代时重新评估时间。如果您在23:59:30之后运行此脚本,则日期可能会更改,您可能还需要在每次迭代时设置日期。您还可以使用特定于Bash的循环控制机制:

for ((iterate = 0; iterate <= 5; iterate++))
do
    today=$(/bin/date +%Y%m%d)
    time=$(/bin/date +"%T.%3N")
    check_offshore
    if [[ $rc != 0 ]] ; then
       echo "$time foreverr_and_$today.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox"
    fi
    sleep 5
done

您可能更喜欢坚持原始日期,在这种情况下,您可以在循环外继续设置today。请注意,如果事情从23:59:56.234到00:00:02.197,你的日志记录变得有点可疑,因为在午夜之前事情需要一段时间。这对你来说是否重要是你必须做出的判断。我建议在日志文件中明确日期+时间;几天后,更容易诊断发生的事情。