【shell脚本】如何在不同时间段,执行任务

情景

早上7.30--7.45 执行自动做早餐的任务,中午11.52--12.15 执行做饭任务,下午17:23--17.40 执行自动浇花任务;

核心点

  1. 如何获取当前时间?获取的时间格式如何自定义?
  2. 在不同时间(这个是判断条件),做不同的任务;
  3. 如果编写一个时间区域,并和当前时间比较;

一、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

注意:date后面有一个空格,时间格式中(变量赋值)前后不要有空格

二、shell判断语句

if 判断语句格式

if  条件
then
 Command
elif 条件
then
 Command
else
 Command
fi   

fi     #别忘了这个结尾

三、shell  判断条件

1)test 命令

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

ok

  1. test 1 = 1 && echo 'ok'

ok
=  等于  应用于:整型或字符串比较 如果在[] 中,只能是字符串

&&   逻辑的 AND 的意思, -a 也是这个意思

  1. 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]表示

代码:

#获取当前时间,格式是时分,例如当前是上午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
上一篇:CDR中的Ellipse Tool(椭圆工具)详情介绍


下一篇:Photoshop 创意的饮料海报