sh/bash/dash/ksh/zsh等Shell脚本
-
cenjianneng
- 帖子: 68
- 注册时间: 2008-09-03 2:28
#1
帖子
由 cenjianneng » 2018-06-12 13:03
比如我想a任务在21-23点做,b任务在23-01点做
下面的脚本只适合a任务,如果想适合b任务,有没有什么好的办法?
time.sh
代码: 全选
#!/bin/bash
hh=`date '+%H'`
time1="$1"
time2="$2"
if [ $hh -ge $time1 ] && [ $hh -le $time2 ]; then
echo "run"
else
echo "not run"
fi
a任务运行
time.sh 21 23
b任务运行
time.sh 23 01
-
daf3707
- 论坛版主
- 帖子: 12731
- 注册时间: 2007-06-13 15:57
- 来自: 在他乡
#2
帖子
由 daf3707 » 2018-06-12 13:26
cron运行两个脚本不行吗
-
susbarbatus
- 帖子: 2966
- 注册时间: 2010-04-10 16:14
- 系统: Arch Linux
#3
帖子
由 susbarbatus » 2018-06-12 13:39
定时执行建议用crontab,不用这么拐弯抹角的……
一定要这么做的话很简单啊,判断一下 $time2 如果小于 $time1 的话,就给 $time2 加24
沉迷将棋中……
-
cenjianneng
- 帖子: 68
- 注册时间: 2008-09-03 2:28
#4
帖子
由 cenjianneng » 2018-06-19 6:51
susbarbatus 写了:定时执行建议用crontab,不用这么拐弯抹角的……
一定要这么做的话很简单啊,判断一下 $time2 如果小于 $time1 的话,就给 $time2 加24
主要是因为任务有点多,一个一个添加到crontab的话会很多,所以我在脚本里做成数组方式
另外$time2加24的话,有个情况,某个任务时间是22点-07点执行,如果$hh=01的时候,[ $hh -ge $time1 ] && [ $hh -le $time2 ] ,即要 01 > 22 && 01 < 31,执行不了。
同时$hh也加24,但这情况13-20执行不了。
-
cenjianneng
- 帖子: 68
- 注册时间: 2008-09-03 2:28
#5
帖子
由 cenjianneng » 2018-06-19 6:58
目前我的解决方法是写两个判断,但这个方法不够精简,脚本代码变得冗余。
当a情况是21-01时用
[ $hh -ge $time1 ] || [ $hh -le $time2 ]
当b情况是02-13时用
[ $hh -ge $time1 ] && [ $hh -le $time2 ]
-
susbarbatus
- 帖子: 2966
- 注册时间: 2010-04-10 16:14
- 系统: Arch Linux
#6
帖子
由 susbarbatus » 2018-06-19 8:45
是你自己要把日期信息舍弃掉……这种情况就不该用 date '+%H',选一个连日期都存下来的格式再比较,或者做个判断,如果日期跟当前日期不同就加24之类的
沉迷将棋中……
-
cenjianneng
- 帖子: 68
- 注册时间: 2008-09-03 2:28
#7
帖子
由 cenjianneng » 2018-06-19 17:50
susbarbatus 写了:是你自己要把日期信息舍弃掉……这种情况就不该用 date '+%H',选一个连日期都存下来的格式再比较,或者做个判断,如果日期跟当前日期不同就加24之类的
加上日期也是个方法,经测试后成功了。
情况a 23 01时,$time2+24小时,并且要再判断 $hh < $time2时 ,$hh也要加24
情况b 12 23时,$time2 $hh,都不用加24