[英]Calling a Bash function in a 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
怎么了,我該如何解決?
注意,問題與函數本身無關。 問題出在環路及其附近。
由於您沒有在循環內設置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,您的日志記錄將變得有些可疑,因為事情發生在午夜之前。 無論對您而言是否重要,您都必須做出判斷。 我建議不要與日志文件中的日期和時間保持一致; 幾天后更容易診斷出發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.