怎么在脚本里做比较好的时间判断

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
论坛版主
帖子: 12730
注册时间: 2007-06-13 15:57
来自: 在他乡

Re: 怎么在脚本里做比较好的时间判断

#2

帖子 daf3707 » 2018-06-12 13:26

cron运行两个脚本不行吗
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 怎么在脚本里做比较好的时间判断

#3

帖子 susbarbatus » 2018-06-12 13:39

定时执行建议用crontab,不用这么拐弯抹角的……

一定要这么做的话很简单啊,判断一下 $time2 如果小于 $time1 的话,就给 $time2 加24
沉迷将棋中……
cenjianneng
帖子: 68
注册时间: 2008-09-03 2:28

Re: 怎么在脚本里做比较好的时间判断

#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

Re: 怎么在脚本里做比较好的时间判断

#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 ]
上次由 cenjianneng 在 2018-06-20 10:06,总共编辑 1 次。
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 怎么在脚本里做比较好的时间判断

#6

帖子 susbarbatus » 2018-06-19 8:45

是你自己要把日期信息舍弃掉……这种情况就不该用 date '+%H',选一个连日期都存下来的格式再比较,或者做个判断,如果日期跟当前日期不同就加24之类的
沉迷将棋中……
cenjianneng
帖子: 68
注册时间: 2008-09-03 2:28

Re: 怎么在脚本里做比较好的时间判断

#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
回复