【shell腳本】在不同時間段,執行對應任務

背景

早上7.30--7.45 執行自動做早餐的任務,中午11.52--12.15 執行做飯任務,下午17:23--17.40 執行自動澆花任務;

 

核心點

  1. 如何獲取當前時間?獲取的時間格式如何自定義?
  2. 在不同時間(這個是判斷條件),做不同的任務;
  3. 如果編寫一個時間區域,並和當前時間比較;

 

目錄

shell 獲取當前時間、自定義格式

shell判斷語句

shell  判斷條件

代碼:

彩蛋


 

shell 獲取當前時間、自定義格式

1)2019年 04月 24日 星期五 21:26:35 CST (這裏原格式輸出當前的時間)

time=$(date)

echo $time1

2)20190424212635 (這裏我們自定義數據格式

#!bin/bash

time=$(date "+%Y%m%d%H%M%S")

echo $time2

解析:%Y 代表 年 即2019;    %m 代表 月 即04;      %d 代表 日 即24;

           %H 代表 小時 即21;    %M代表 分鐘 即26;    %S代表 秒 即35;

年,月,日,時,分,秒   的英文意思:Year, month, day, hour, minute, second

3)2019-04-24 21:26:35

#!bin/bash

time=$(date "+%Y-%m-%d %H:%M:%S")

echo $time

相信大家看了三個例子,應該會獲取的時間,並自定時間格式了。

4)2019.04.24

這個先不公佈代碼啦,知道你們會的,滑稽😀

 

對了大家注意一下:date後面有一個空格,時間格式中(變量賦值)前後不要有空格

 

 

shell判斷語句

if 判斷語句格式

if  條件
then
 Command

elif 條件
then
 Command

else
 Command
fi        

fi     #別忘了這個結尾

 

shell  判斷條件

1)test 命令

# if test 1 = 1 ; then echo 'ok'; fi

ok

 

# test 1 = 1 && echo 'ok'

ok

=  等於  應用於:整型或字符串比較 如果在[] 中,只能是字符串

&&   邏輯的 AND 的意思, -a 也是這個意思

 

# test 1 -eq 1 && echo 'ok'

ok

-eq  等於 應用於:整型比較

注意:所有字符 與邏輯運算符直接用“空格”分開,不能連到一起。test 1=1就是錯誤的!

 

2)[ ] 表達式

 # [ 1 -eq 1 ] && echo 'ok'

ok

 

# [ 2 < 1 ] && echo 'ok'

-bash: 2: No such file or directory

 

# [ 2 \< 1 ] && echo 'ok'

# [ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'

ok

 

# [ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'

-bash: [: missing `]'

注意:在[ ] 表達式中,常見的>, <需要加轉義字符,表示字符串大小比較,以acill碼 位置作爲比較。

不直接支持<, >運算符,還有邏輯運算符|| , && 它需要用-a[and] –o[or]表示

參考:https://www.cnblogs.com/tony1314/p/8315666.html

 

代碼:

#獲取當前時間,格式是時分,例如當前是上午8:50,hh=850
hh=`date '+%H%M'`

#早上7.30--7.45 執行自動做早餐的任務
if [ $hh -ge 730 -a $hh -le 745 ]
then
    echo " Morning -- Automatic breakfast "


#中午11.52--12.15 執行做飯任務
elif [ $hh -ge 1152 -a $hh -le 1215 ]
then
    echo " Lunch time -- Cook "

    
#下午17:23--17.40 執行自動澆花任務
elif [ $hh -ge 1723 -a $hh -le 1740 ]
then
    echo "night -- Automatic watering"


#不適合適的時間,不做什麼
else
    echo "$hh Not within time "

fi

補充一下判斷語句中含義的:

-eq  等於 應用於:整型比較

-ne  不等於 應用於:整型比較

-lt  小於 應用於:整型比較

-gt  大於 應用於:整型比較

-le  小於或等於 應用於:整型比較

-ge  大於或等於 應用於:整型比較

-a  雙方都成立(and) 邏輯表達式 –a 邏輯表達式

-o  單方成立(or) 邏輯表達式 –o 邏輯表達式

-z  空字符串

-n  非空字符串

 

彩蛋

有些任務需要一直執行,這時需要在循環中。


while true;do

    #獲取當前時間,格式是時分,例如當前是上午8:50,hh=850
    hh=`date '+%H%M'`

    #早上7.30--7.45 執行自動做早餐的任務
    if [ $hh -ge 730 -a $hh -le 745 ]
    then
        echo " Morning -- Automatic breakfast "

    #中午11.52--12.15 執行做飯任務
    elif [ $hh -ge 1152 -a $hh -le 1215 ]
    then
        echo " Lunch time -- Cook "
        
    #下午17:23--17.40 執行自動澆花任務
    elif [ $hh -ge 1723 -a $hh -le 1740 ]
    then
        echo "night -- Automatic watering"

    #不適合適的時間,不做什麼
    else
        echo "$hh Not within time "

    fi

    sleep 5 #休息5s

    out_time=`date '+%Y-%m-%d-%H:%M'`  #格式:2019-04-24-21:26
    echo "$out_time"

done

 

 

希望對你有幫助。

如果有不對的地方歡迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章