具有一些时间条件的 Bash 代码

具有一些时间条件的 Bash 代码

Bash 代码如何在某些时间条件下运行二进制文件或其他命令,例如。伪代码

if time is between 6:00 - 9:00 run foo.sh

else if time is between 9:00 - 12:00 run bar.sh

else run foobar.sh

请帮忙

答案1

像这样:

#!/usr/bin/env bash

hour=$(date +%k)
if ((hour >= 6 && hour < 9)); then
    ./foo.sh
elif ((hour >= 9 && hour <= 12)); then
    ./bar.sh
else
    ./foobar.sh
fi

((...))$((...))是算术命令,如果表达式非零,则返回退出状态 0;如果表达式为零,则返回 1。如果需要副作用(分配),也用作“let”的同义词。

http://mywiki.wooledge.org/ArithmeticExpression


厌恶POSIX

#!/usr/bin/env sh

hour=$(date +%H)

if [ "$hour" -ge 6 ] && [ "$hour" -lt 9 ]; then
    ./foo.sh
elif [ "$hour" -ge 9 ] && [ "$hour" -lt 12 ]; then
    ./bar.sh
else
    ./foobar.sh
fi

或者

case "$hour" in
    ( 0[6-8]      ) echo '6:00 TO 8:59'  ;;
    ( 09 | 1[0-1] ) echo '9:00 TO 11:59' ;;
    ( *           ) echo 'rest'          ;;
esac

答案2

你的逻辑需要更精确,你的第一个 if 声明 09:00,第二个 if 声明 09:00。第一个应该是08:59?或者第二个应该是 09:01?让我们使用不带“:”的日期函数,这样您就可以在比较中将其用作 hhmm(小时上不填充零)

timenow=$(date +%k%M)。然后按照 Gilles 上面的说明发出 if 但比较 >=600 && <= 859 和 >= 900 && <=1159

相关内容