2016-12-12 25 views
0

如何比較兩個時間戳和另一個條件。 請參閱下面的代碼作爲解決方案的試用版。如何在unix shell腳本中將當前時間與dayofweek中的兩個不同時間進行比較?

d=$(date +%Y%m%d)   #Today 
d1=$(date +%b" "%d)  #Centre1 col 1 & 2 (MON DD) 
ct=$(date +'%H%M%S')  #Current Time (HHMM) 
t01='013000' 
t02='033000' 
t03='053000' 
t04='073000' 


find . -mtime 0 -iname "RBDEXT*.csv" -ls | awk '{printf("%-5s%s\t%-40s%s\t%s\t\n", $8,$9,$11,$10,$7)}' > rbdextmp1.txt 


rbdextCO=$(wc -l rbdextmp1.txt | awk '{print $1}') 
rbdextIN=$(cat rbdextmp1.txt | grep "inprogress" | wc -l) 

touch centre.txt 

if [[ [ "$rbdextIN" -eq 0 ] && 
[ [ "$ct" -gt "$t01" ] && [ "$ct" -lt "$t02" ] && [ "$rbdextCO" -eq 1 ] || 
    [ "$ct" -gt "$t02" ] && [ "$ct" -lt "$t03" ] && [ "$rbdextCO" -eq 2 ] || 
    [ "$ct" -gt "$t03" ] && [ "$ct" -lt "$t04" ] && [ "$rbdextCO" -eq 3 ] ] 
]] 

then 
echo "$d1 RBDEXT.$d.csv($rbdextCO) OK" >> centre.txt 
elif [ "$rbdextIN" -ge 1 ] 
then 
echo "$d1 RBDEXT.$d.csv($rbdextCO) OKBUT" >> centre.txt 
else 
echo "$d1 RBDEXT.$d.csv($rbdextCO) NOK" >> centre.txt 
fi 

請您幫我解答一下,謝謝!

+2

而不是「這不是爲我工作」,告訴我們它做什麼,你不要指望。 另外,關閉'fi'在哪裏? – slim

+0

@EdMorton,先生,我根據要求更新了問題。請更新。 – user7268185

+0

@EdMorton,先生,我已經更新了這個問題,我想這可能會有所幫助。 – user7268185

回答

1

聽起來好像這是你想要的東西:

currenttime=$(date +'%H%M%S') 
dayofweek=$(date +'%u') 

time1='013000' 
time2='033000' 
time3='053000' 
time4='073000' 

count=$(wc -l < xxx.txt) 

if (((dayofweek == 1) && 
     (((currenttime > time1) && (currenttime < time2) && (count == 1)) || 
     ((currenttime > time2) && (currenttime < time3) && (count == 2)) || 
     ((currenttime > time3) && (currenttime < time4) && (count == 3))) 
    )) 
then 
    color="GREEN" 
else 
    color="RED" 
fi 

printf 'GP_GLOBAL_FEED(%s) %s\n' "$count" "$color" | 
mailx -s "$color" [email protected] 
+0

不客氣。如果你不確切地告訴我他們是什麼,我不能幫你調試任何錯誤。主席先生, –

+0

,非常感謝你的輸入,我得到了下面的消息的其他部分輸出,我粘貼了問題中的整個代碼。 ./t.ksh[38]:rbdextIN:找不到[沒有這樣的文件或目錄] – user7268185

+0

您發佈的產生語法錯誤的腳本與我發佈的腳本不一樣。例如,您已將'((''''))'算術運算符分界符更改爲嵌套單個括號'((..))'。把它放回我給你的風格/語法,然後運行它來確保它能正常工作。現在進行1次更改並再次運行 - 如果出現錯誤,則更改會引入錯誤。重複,直到找出導致錯誤的更改爲止。 –

2

我建議你慢慢建立起來。

開始:

if [ "2" -gt "1" ] 
then 
    echo "Green" 
else 
    echo "Red" 
fi 

...看看它的工作原理。 然後使用&&添加第二個子句,解決任何語法問題,確保它有效。 然後用變量替換你的硬編碼值。 然後用來自date的輸出填充變量。檢查每一步之後它仍然有效。你會到達那裏。

獎金提示 - 用於命令替換的反引號已經被拖了一段時間,因爲它很容易犯錯誤。改爲使用currentTime=$(date +%H%M%S)

相關問題