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