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

简介: 基于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
相关文章
|
3天前
|
Shell
蓝易云 - 简单shell脚本的编写教程
以上就是编写一个基本Shell脚本的步骤。当然,Shell脚本可以做的远不止这些,你可以使用变量,控制结构(如if语句和循环),以及各种Shell命令和功能来编写更复杂的脚本。
11 1
|
14天前
|
Shell UED Python
Shell 循环语句:重复任务的自动化利器
在Shell脚本中,循环语句如`while`和`for`是自动化任务的关键。`while`循环在条件满足时执行,例如计算1到100的和;`for-in`循环遍历列表,可用于迭代指定数值或命令输出,如求1到100的和。`select-in`循环提供交互式菜单,增强脚本用户体验。理解并运用这些循环能提升脚本效率和可读性。现在,动手试试吧!
13 2
|
15天前
|
监控 Shell Linux
Linux的Shell脚本详解
Linux的Shell脚本详解
|
19天前
|
Shell
shell脚本
shell脚本
18 2
|
4天前
|
Shell 调度
Shell脚本中的if条件判断语句
Shell脚本中的if条件判断语句
|
4天前
|
Shell
蓝易云 - 简单shell脚本的编写教程
以上就是编写一个基本Shell脚本的步骤。当然,Shell脚本可以做的远不止这些,你可以使用变量,控制结构(如if语句和循环),以及各种Shell命令和功能来编写更复杂的脚本。
5 0
|
27天前
|
Ubuntu Java Linux
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
Linux centos7 ubuntu 一键安装Java JDK 脚本 shell 脚本
38 2
|
5天前
|
机器学习/深度学习 Unix Java
技术笔记:Linux之Shell脚本编程(一)
技术笔记:Linux之Shell脚本编程(一)
|
8天前
|
Shell
Shell脚本之条件语句if总结
Shell脚本之条件语句if总结
|
27天前
|
Ubuntu Shell Linux
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
linux shell 后台执行脚本的方法 脚本后台运行 后台运行程
16 0