GNU/Linux >> Linux の 問題 >  >> Linux

LinuxのBashスクリプトで日付コマンドを使用する方法

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ヒアドキュメントチュートリアル

Linux
  1. Linuxgrepコマンドの使用方法

  2. Linuxでhistoryコマンドを使用する方法

  3. UbuntuLinuxで稼働時間コマンドを使用する方法

  1. Linuxの履歴コマンドの使用方法

  2. LinuxでSuコマンドを使用する方法

  3. Linux screen コマンドの使用方法

  1. Bash読み取りコマンドの使用方法

  2. LinuxでDisownコマンドを使用する方法

  3. Linuxxargsコマンドの使用方法