【shell脚本】在不同时间段,执行对应任务
背景
早上7.30--7.45 执行自动做早餐的任务,中午11.52--12.15 执行做饭任务,下午17:23--17.40 执行自动浇花任务;
核心点
- 如何获取当前时间?获取的时间格式如何自定义?
- 在不同时间(这个是判断条件),做不同的任务;
- 如果编写一个时间区域,并和当前时间比较;
目录
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
Commandelif 条件
then
Commandelse
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
希望对你有帮助。
如果有不对的地方欢迎指正。
文章来源: guo-pu.blog.csdn.net,作者:一颗小树x,版权归原作者所有,如需转载,请联系作者。
原文链接:guo-pu.blog.csdn.net/article/details/105712054
- 点赞
- 收藏
- 关注作者
评论(0)