簡體   English   中英

Bash腳本中的時間變量

[英]Time Variables in Bash Scripting

如果每次有3個不同的腳本在每次寫入文件時都在不同的時間運行,那么如何編寫bash腳本以僅在特定的時間運行特定的腳本。 這並不像cron作業那么簡單(盡管cron可能會根據時間交換出.sh文件),但我正在尋找時間變量。

例如:

If 9am-11:30 am run scriptA.sh if file.txt is changed. 
If 11:30am-5:45pm run scriptB.sh if file is changed.
If 5:46pm-8:59am run scriptC.sh if file is changed.

我問了類似的問題,但我對所要查找的變量或如何定義它們的了解不夠清楚。

我看到有兩個問題。 1,如何確定當前小時是否在特定范圍內。 2,如何確定文件是否最近被修改。

這是我的處理方式:

#!/bin/bash

now=$( date +%s )
current_hour=$( date +%H )
file_mod=$( ls -l --time-style=+%s file.txt | awk '{print $(NF-1)}' )
file_age=$(( $now - $file_mod ))

if [[ $current_hour -gt 9 ]] && \
   [[ $current_hour -lt 11 ]] && \
   [[ $file_age -lt 3600 ]]
then
    ./scriptA.sh
fi

在這里,我使用bash運算符進行數字比較:-gt,-lt

為了獲得更精細的時間,您需要計算自午夜以來的時間。 也許像這樣:

hour=$( date +%H )
min=$( date +%M )
minutes=$( echo "( 60 * $hour ) + $min" | bc -l )

eleven_thirty=$( echo "( 60 * 11 ) + 30" | bc -l )

比較時間戳來確定是否需要工作,進行或不進行傳統的工具是make 它的默認行為是為指定目標計算一個依賴鏈,並確定是否有任何依賴文件已更改。 如果不是,則不需要重新設定目標。 這是避免重新編譯的好工具,但很容易擴展到其他任務。

.made ,您將創建一個標志文件(例如.made )並將其指定為依賴於您的file 現在,如果file已更改, .made需要重新創建.made ,因此make將運行您指定的命令。 在這種情況下,我們將運行一個簡單的Shell腳本,然后touch .made以將最新的(成功的)運行時間傳達給將來的運行。

剩下的是配方可以在不同的時間運行不同的命令。 我的解決方法是簡單的case陳述。 注意, make解釋美元符號,因此我們需要將應傳遞給外殼的美元符號加倍。

.made: file
    case $$(date +%H:%M) in \
        09:* | 10:* | 11:[0-2]? ) \
            scriptA.sh ;; \
        11:[3-5]? | 1[2-6]:* | 17:[0-3]? | 17:4[0-5]) \
            scriptB.sh;; \
        17:4[6-9] | 17:5? | 1[89]:* | 2?:* | 0[0-8]:* ) \
            scriptC.sh;; \
    esac
    touch $@   # $@ expands to the current target

整個case語句需要作為一條邏輯行傳遞到shell,因此我們以那些討厭的反斜杠結束以換行。

還要注意, make對於縮進很挑剔; 配方中的每一行(邏輯行)都應以文字制表符開頭。

make的默認行為是運行文件中的第一個目標。 Makefile僅包含一個目標,因此make等同於make .made

還要注意, make有關退出代碼的煩惱; 如果scriptAscriptBscriptC可以以非零退出狀態退出(被make視為致命錯誤),並且.made文件將不會更新。 (不過,您可以輕松地對此加以防范 。)

好吧,由於Bash變量只能存儲stringinteger ,因此“ date”變量只是字符串操作,如以下示例所示:

hours=`date +%H`
minutes=`date +%M`
sum=$(($hours + $minutes))
digit=`echo $sum | sed -e 's/\(^.*\)\(.$\)/\2/'` # counts total digits

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM