情景
早上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
注意: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]表示
代码:
#获取当前时间,格式是时分,例如当前是上午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