我制作了这个脚本来检查以确保创建了离岸脚本。我工作得很好——我添加了一个函数以使其更干净一些。但我不认为该函数有效,因为它一直在同一时间(以秒为单位)打印出来。
#!/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
发生了什么事以及如何修复它?
最佳答案
请注意,该问题与函数本身无关;问题出在循环及其周围环境中。
由于您没有在循环内设置 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
您可能更愿意保留原始日期,在这种情况下,您可以在循环外继续设置今天
。请注意,如果事情从 23:59:56.234 变为 00:00:02.197,您的日志记录会变得有点可疑,因为事情在午夜之前需要一段时间。无论这对你是否重要,你都必须做出判断。我建议日志文件中的日期+时间要明确;几天后更容易诊断发生了什么。
关于bash - 在 while 循环中调用 Bash 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749752/