2015-01-02 197 views
2

我做了這個腳本來檢查以確保創建了離岸腳本。我工作正常&emdash;我加入了一個使它更清潔的功能。但我不認爲這個功能可以工作,因爲它可以在幾秒鐘內同時打印出來。在while循環中調用Bash函數

#!/bin/bash 
#set -x 
check_offshore() 
{ 
    local RESULTS 
    RESULTS=$(ssh -q -T [email protected] "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 [email protected]:/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 [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 
17:42:28.380 foreverr_and_20150102.csv is not present in [email protected]:/come/and/play/with/us/danny/DropBox 

這是怎麼回事,我該如何解決它?

+3

既然你沒有在循環內設置'time = $(...)',你怎麼期望它改變呢? –

+0

如果你使用Bash,你可能更喜歡'((iterate = 0; iterate <= 5; iterate ++))'來控制循環。 –

回答

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 [email protected]:/come/and/play/with/us/danny/DropBox" 
    fi 
    sleep 5 
done 

你可能更願意堅持使用原來的日期,在這種情況下,您可以繼續設置today一次外循環。請注意,如果事情從23:59:56.234到00:00:02.197變得有點可疑,因爲事情在午夜之前需要一段時間。無論對你而言,重要的是你必須做出的判斷。我建議在日誌文件中明確使用日期+時間;在幾天後診斷髮生的事情更容易。

+0

timmy() { time = $(/ bin/date +「%Y%m%d-%T.%3N」) } 增加了一個帶日期和時間的子程序 - 謝謝 – capser