今日がbashまたはperlを使用して週末かどうかを確認する方法は?
特定のプログラムが週末に実行されるのを防ぎたい。
以下を使用できます。
pax> if [[ $(date +%u) -gt 5 ]] ; then
> echo weekend
> fi
date +%u
は、月曜日(1)から日曜日(7)までの曜日を示します。 5より大きい場合(土曜日= 6または日曜日= 7)、それは週末です。
したがって、スクリプトの先頭に次のようなものを置くことができます。
if [[ $(date +%u) -gt 5 ]] ; then
echo 'Sorry, you cannot run this program today.'
exit
fi
平日かどうかを確認するには、次のコマンドを使用します。
if [[ $(date +%u) -lt 6 ]] ; then
case "$(date +%a)" in
Sat|Sun) echo "weekend";;
esac
これは実際には驚くほど難しい問題です。「週末」は土曜日と日曜日を意味するので、「週末」を構成するものは実際には文化によって異なります(たとえば、イスラエルでは、日曜日に働き、金曜日が休みです)。 date
コマンドで日付を取得できますが、すべてのユーザーに対して機能する方法でこれを実装する場合は、各ロケールの週末を構成するものを示すいくつかの追加データを格納する必要があります。 1つの国のみを対象とする場合、他の回答で提示された解決策が機能します...しかし、ここで行われている仮定に留意することは常に良いことです。
Perlの localtime
演算子を使用します。
現地時間
Time関数によって返された時刻を、ローカルタイムゾーンに対して分析された時刻を含む9要素のリストに変換します。通常、次のように使用されます。
# 0 1 2 3 4 5 6 7 8 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
…
$wday
は曜日です。0は日曜日を示し、3は水曜日を示します。
例えば:
$ date Sun Aug 15 20:27:29 CDT 2010 $ Perl -le 'my $ wday =(localtime)[6]; print $ wday> = 1 && $ wday <= 5? "平日": "週末" ' 週末
私は平日にプログラムを実行するこの方法が好きです:
[[ $(date +%u) -lt 6 ]] && weekday-program
それは少しトリッキーな構造ですが、コンパクトで追加が簡単です。
これがこの質問に適しているかどうかは本当にわかりませんが、他の人を助けるためにこれを共有したかったので、これが私が探していたものに最も近いスタックの質問です。
これは私がコンピューターを起動したときにアプリケーションを起動するために使用するシェルスクリプトです。アプリケーションは週末にサーバーに接続できません(サービスは週末に実行されないため、メンテナンスのためにダウンしています(外国為替取引アプリケーション)。
このスクリプトに関する情報、dは1から7(月曜日から日曜日)hは24時間です。これを独自の設定に調整できます。多分、週半ばのメンテナンスまたはその他の原因がある可能性があります。これは私の初めてのシェルスクリプトなので、もっと良い方法があると確信しています。誰かが編集をしたい場合は、遠慮なく承認を確認します(または他の誰かがそれを行う可能性があります)。
#!/bin/bash
d=$(date +%u)
h=$(date +%H)
case $d in
'5')
# Friday after 10pm
if (($h >= 22)) ; then
exit
fi
;;
'6')
# all day saturday
exit
;;
'7')
#sunday before 10pm
if (($h < 22)) ; then
exit
fi
;;
*)
# any other time run the program
;;
esac
printfにも日付があります
printf -v day '%(%a)T'
case $day in
Sat|Sun) echo "Hooray!";;
esac