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でない場合は終了ステータス0を返し、式が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で、2番目のifステートメントは09:00です。最初は08:59でなければなりませんか?それとも、2番目は09:01でなければなりませんか? ":"なしで日付関数を使用して、比較時にhhmmとして使用できます(時間にゼロパディングなし)。
timenow=$(date +%k%M)
。次に、Gillesが上記のようにifを実行し、> = 600 && <= 859と> = 900 && <= 1159を比較します。