bashスクリプトを書き始めたとき、私が頻繁にすべてのスクリプトを処理している1つの操作は、日付と時刻を処理していることに気付きました。日付を使用したファイル/ディレクトリの命名、API結果のフェッチ、アプリケーションに適した日付/時刻へのエポック値の変換、CSVファイルの日付列の操作などの多くの操作を実行しました。Bashスクリプトの初心者の場合は、この記事は、Bashスクリプトでdateコマンドを使用する方法、シェルスクリプトでdateコマンドを使用して日付と時刻を操作する方法、それらを操作してLinuxでさまざまな操作を行う方法を理解するのに役立ちます。
システムの日付と時刻がどのように設定されるかについての基本的な理解が必要です。この部分は、主にサーバー管理者が作業を担当します。
ただし、個人ユーザーであり、個人のマシンでLinuxを使用している場合は、日付と時刻の設定方法、それらを同期する方法、および変更方法を理解している必要があります。
Linuxが時刻の同期を維持するために使用する時計は2つあります。
- リアルタイムクロック -これはシステムのマザーボードに統合されている時計であり、マシンをシャットダウンしても動作します。
- システム時計 -これはLinuxカーネルによって処理され、システムの起動時にカーネルはリアルタイムクロックから初期時刻を取得します。
日付と時刻を設定するプロセスについては説明しません。これについては、別のトピックについて説明します。 date
の使用方法について、この記事のコア部分を調べてみましょう。 LinuxのBashスクリプトのコマンド。
ヘルプの取得
まず、 date
のバイナリの場所を確認できます 次のコマンドを実行してコマンドを実行します。
$ which date /usr/bin/date
日付コード> コマンドはシェルビルトインではなく、外部プログラムです。
type
を実行すると、その情報を取得できます。 コマンド。
$ type -a date date is /usr/bin/date date is /bin/date
作業するオプションはたくさんあり、すべてを覚えておくのは不可能です。ここで、ヘルプとマニュアルページが役立ちます。
次のコマンドを実行して、 date
のマニュアルページにアクセスします。 コマンド。
$ man date
次のコマンドを実行して、ヘルプメッセージにアクセスします。
$ date --help
現在の日付と時刻を印刷する
ターミナルを起動し、 date
を実行するだけです 指図。現在の日付と時間およびタイムゾーンが表示されます。私の場合、タイムゾーンを ISTに設定しました OSのインストール中。
$ date Sunday 13 February 2022 11:27:17 AM IST
UTCで日付と時刻を取得することもできます -u
を使用したタイムゾーン フラグ。
$ date -u Sunday 13 February 2022 05:57:36 AM UTC
タイムゾーン変換
date
の出力を取得できます 環境変数TZを設定して、さまざまなタイムゾーンでコマンドを実行します 。 TZをモスクワに設定しました およびシンガポール 以下の例のタイムゾーン。
$ Z="Europe/Moscow" date
Sunday 13 February 2022 08:59:03 AM MSK
$ TZ="Asia/Singapore" date
Sunday 13 February 2022 01:59:37 PM +08
「timedatectl
」を実行すると、タイムゾーンのリストを取得できます。 "コマンド。
$ timedatectl list-timezones
$ timedatectl list-timezones | grep -i singapore
Asia/Singapore
Singapore
$ timedatectl list-timezones | grep -i moscow
Europe/Moscow
ファイルの最終変更時刻
通常、 stat
を使用します ファイルの変更時刻を確認するコマンド。 date
でも同じことが確認できます -r
を使用したコマンド フラグ。
$ stat ~/.bashrc File: /home/karthick/.bashrc Size: 4342 Blocks: 16 IO Block: 4096 regular file Device: 806h/2054d Inode: 27787278 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/karthick) Gid: ( 1000/karthick) Access: 2022-02-13 09:06:45.713721080 +0530 Modify: 2022-02-11 20:18:52.485178931 +0530 Change: 2022-02-11 20:18:52.485178931 +0530 Birth: -
$ date -r ~/.bashrc Friday 11 February 2022 08:18:52 PM IST
stat
が表示されます コマンドの出力形式がdate
と異なります コマンドですが、どちらも同じ目的を果たします。
さまざまなフォーマットオプション
日付コード> コマンドはフォーマットオプションをサポートしており、これらのオプションを使用して
date
をフォーマットできます コマンド出力を任意の形式にするか、出力から特定の値のみを取得できます。
date
を開きます コマンドのマニュアルページで、下の画像に示すセクションを探します。
書式設定オプションはたくさんありますが、すべてが役立つわけではありません。重要なフォーマットオプションのいくつかを見て、それがどのように機能するかを理解します。
デフォルトでは、 date
コマンドは日付と時刻を表示します。日付または時刻のみを印刷したい場合はどうなりますか?
$ date
Sunday 13 February 2022 11:27:17 AM IST
日付のみを取得するには、%F
を使用できます フラグまたは%D
フラグ。
$ date +%F
2021-11-16
$ date +%D
02/13/22
フォーマッタフラグを使用している場合は、プレフィックスとして +
を付ける必要があります 上記の例で行ったような記号。
-
%F
からの出力 フラグはYYYY-MM-DDになります フォーマット。 -
%D
からの出力 フラグはMM/ DD / YYになります フォーマット。
日、月、年を個別に取得して、独自の新しい形式の出力を作成できます。
$ date +%Y
2022
$ date +%m
02
$ date +%d
13
独自のフォーマットされた出力を作成するには、以下に示すすべてのフラグを組み合わせるだけです。
$ date +%Y_%m_%d
2022_02_13
日付と同様に、%r
を使用して単独で時間を取得することもできます (12時間形式)または%T
(24時間形式)フラグ。
$ date +%r # 12 hour format
11:24:12 PM IST
$ date +%T # 24 hour format
23:24:11
時間、分、秒を個別に取得して、独自のフォーマットされた出力を作成できます。
$ date +%H
12
$ date +%M
24
$ date +%S
03
上記のすべてのフラグを組み合わせて、カスタム出力を作成します。
$ date +%H_%M_%S
12_26_53
これらのカスタムフォーマットオプションはどこで役立ちますか?私の場合、スクリプトの一部としてファイルを作成するときは、今日の日付で名前を付けます。ですから、必要なときに見てみると便利です。
これまで、日付と時刻を個別に操作する方法を見てきました。日付と時刻の両方を表示したい場合があります。その場合、以下のように日付と時刻を組み合わせるか、独自のフォーマットされた出力を作成できます。
$ date "+%F %r"
2021-11-16 11:29:06 PM IST
特定の日にのみスクリプトを実行する
場合によっては、特定の曜日にのみスクリプトを実行したいことがあります。たとえば、スクリプトを金曜日にのみ実行する場合は、%A
を使用できます。 (金曜日)または%a
(金)フラグを立て、それに応じてロジックを記述します。
if [[ $(date +%A) = Friday ]] then echo "Running the code" else echo "Today is not Friday, Exiting the script" fi OUTPUT: Today is not Friday, Exiting the script
利用可能なフォーマットオプションは他にもあります。マニュアルページを参照して、それらすべてを調べてください。
出力を変数に保存する
スクリプトを作成するときは、 date
の出力を保存することをお勧めします。 変数にコマンドを送信し、スクリプトで変数を使用します。そのようなシナリオの1つは、日付と時刻を使用してファイル名を作成することです。
今日の日付が変数TDY
に格納される以下の例を見てください。 同じことがファイル名「disk_usage_ $ {TDY} .txt
」の作成にも使用されます " df -h
の出力を保存します "コマンド。
$ TDY=$(date +%F)
$ df -h > ~/disk_usage_${TDY}.txt
$ ls -l *.txt -rw-rw-r-- 1 karthick karthick 474 Feb 13 23:40 disk_usage_2022-02-13.txt
$ cat disk_usage_2022-02-13.txt Filesystem Size Used Avail Use% Mounted on tmpfs 1.6G 154M 1.5G 10% /run /dev/sda7 93G 27G 61G 31% / tmpfs 7.8G 82M 7.7G 2% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/sda9 261G 130G 118G 53% /nextdrive /dev/sda6 348G 110G 221G 34% /home /dev/sda5 2.0G 234M 1.8G 12% /boot/efi tmpfs 1.6G 180K 1.6G 1% /run/user/1000
-d
の使用 または--date
フラグ
これは、 date
で私が最も気に入っている重要な機能です。 指図。文字列を引数として-d
に渡すことができます または--date
フラグを立てると、デフォルトの形式で出力が得られます。
以下の例を見てください。文字列引数を「today
」として渡しました "、"昨日
"、"明日
"、"先週の木曜日
"、" 今日(+、-)20年
"から--date
国旗。 Dateコマンドはこれらの文字列を解釈し、出力をデフォルトの形式に変換します。
$ date --date "Today"
Sunday 13 February 2022 01:01:26 PM IST
$ date --date "now"
Sunday 13 February 2022 01:01:34 PM IST
$ date --date "yesterday"
Saturday 12 February 2022 01:01:39 PM IST
$ date --date "Tomorrow"
Monday 14 February 2022 01:01:45 PM IST
$ date --date "Last Thursday"
Thursday 10 February 2022 12:00:00 AM IST
$ date --date "Today - 20 years"
Wednesday 13 February 2002 01:01:56 PM IST
$ date --date "Today + 20 years"
Thursday 13 February 2042 01:02:01 PM IST
上記の例で示したもの以外の相対的な文字列引数を渡すことができます。
エポック時間
エポック時間は、 -d
を使用して現在の日付と時刻の形式に変換できます。 または--date
国旗。 %s
フラグ出力はエポック形式になります。
$ date +%s
1644737777
人間が読める標準形式に変換するには、 @
を追加します 次に、以下に示すようなエポックタイムが続きます。
$ date --date @1644737777
Sunday 13 February 2022 01:06:17 PM IST
上記のすべての例で、デフォルトの出力が表示されていることがわかります。フォーマッターを-d
と組み合わせることができます または--date
カスタム出力を取得するためのフラグ。
$ date --date "Today + 20 years" +%Y
2042
$ date --date "Today + 21 years" +%s
2275890194
$ date --date @2275890194 +%Y
2042
結論
この記事では、 date
の使用方法について説明しました 例を使用したBashスクリプトのコマンド。この時点で、 date
を快適に使用できるはずです。 スクリプトのコマンド。利用可能なフォーマットオプションはたくさんあります。テストして、それらに慣れてください。
この記事に関するフィードバックや提案がある場合は、下のコメントセクションからお知らせください。
Bashスクリプトガイド:
- LinuxおよびUnixでBashスクリプトをデバッグする方法
- Bashスクリプト–getoptsを使用してBashスクリプトの引数を解析する
- LinuxおよびUnixでZenityを使用してBashスクリプトでGUIダイアログボックスを作成する方法
- Bashスクリプティング–ケースステートメント
- Bashスクリプティング–条件付きステートメント
- Bashスクリプティング–文字列操作
- Bashスクリプティング–例を使用して説明されたPrintfコマンド
- Bashスクリプティング–例を使用して説明されたインデックス付き配列
- Bashスクリプティング–例を使用して説明された連想配列
- Bashスクリプティング–例で説明されているForループ
- Bashスクリプティング–ループの説明中およびループまで
- 例を使用して説明されたBashリダイレクト
- Bashスクリプティング–例で説明されている変数
- Bashスクリプティング–例で説明されている関数
- Linuxの例で説明されているBashEchoコマンド
- 初心者向けのBashヒアドキュメントチュートリアル