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

举报
一颗小树x 发表于 2021/03/10 23:31:56 2021/03/10
【摘要】 背景 早上7.30--7.45 执行自动做早餐的任务,中午11.52--12.15 执行做饭任务,下午17:23--17.40 执行自动浇花任务;   核心点 如何获取当前时间?获取的时间格式如何自定义?在不同时间(这个是判断条件),做不同的任务;如果编写一个时间区域,并和当前时间比较;   目录 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

 

代码:


  
  1. #获取当前时间,格式是时分,例如当前是上午8:50,hh=850
  2. hh=`date '+%H%M'`
  3. #早上7.30--7.45 执行自动做早餐的任务
  4. if [ $hh -ge 730 -a $hh -le 745 ]
  5. then
  6. echo " Morning -- Automatic breakfast "
  7. #中午11.52--12.15 执行做饭任务
  8. elif [ $hh -ge 1152 -a $hh -le 1215 ]
  9. then
  10. echo " Lunch time -- Cook "
  11. #下午17:23--17.40 执行自动浇花任务
  12. elif [ $hh -ge 1723 -a $hh -le 1740 ]
  13. then
  14. echo "night -- Automatic watering"
  15. #不适合适的时间,不做什么
  16. else
  17. echo "$hh Not within time "
  18. fi

补充一下判断语句中含义的:

-eq  等于 应用于:整型比较

-ne  不等于 应用于:整型比较

-lt  小于 应用于:整型比较

-gt  大于 应用于:整型比较

-le  小于或等于 应用于:整型比较

-ge  大于或等于 应用于:整型比较

-a  双方都成立(and) 逻辑表达式 –a 逻辑表达式

-o  单方成立(or) 逻辑表达式 –o 逻辑表达式

-z  空字符串

-n  非空字符串

 

彩蛋

有些任务需要一直执行,这时需要在循环中。


  
  1. while true;do
  2. #获取当前时间,格式是时分,例如当前是上午8:50,hh=850
  3. hh=`date '+%H%M'`
  4. #早上7.30--7.45 执行自动做早餐的任务
  5. if [ $hh -ge 730 -a $hh -le 745 ]
  6. then
  7. echo " Morning -- Automatic breakfast "
  8. #中午11.52--12.15 执行做饭任务
  9. elif [ $hh -ge 1152 -a $hh -le 1215 ]
  10. then
  11. echo " Lunch time -- Cook "
  12. #下午17:23--17.40 执行自动浇花任务
  13. elif [ $hh -ge 1723 -a $hh -le 1740 ]
  14. then
  15. echo "night -- Automatic watering"
  16. #不适合适的时间,不做什么
  17. else
  18. echo "$hh Not within time "
  19. fi
  20. sleep 5 #休息5s
  21. out_time=`date '+%Y-%m-%d-%H:%M'` #格式:2019-04-24-21:26
  22. echo "$out_time"
  23. done

 

 

希望对你有帮助。

如果有不对的地方欢迎指正。

文章来源: guo-pu.blog.csdn.net,作者:一颗小树x,版权归原作者所有,如需转载,请联系作者。

原文链接:guo-pu.blog.csdn.net/article/details/105712054

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。