bash を使って日付をカウントダウンする方法

bash を使って日付をカウントダウンする方法

重要なイベントまであと何日あるか知りたいですか? Linux bash と date コマンドが役に立ちます。

大きな休日が近づいてきているので、どれくらいの準備期間が必要か思い出す必要があるかもしれません。

幸いなことに、date コマンドから多くの助けを得ることができます。この投稿では、date スクリプトと bash スクリプトを使用して、今日から予想されるイベントまでの日数を調べる方法について説明します。

まず、先に進む前にいくつかのヒントを紹介します。 date コマンドの %j オプションは、現在の日付を 1 から 366 までの数値として表示します。予想どおり、1 月 1 日は 1 と表示され、12 月 31 日はうるう年かどうかに応じて 365 または 366 と表示されます。挑戦し続けてください。次のような画面が表示されます。

$ 日付 +%j
339

ただし、次のように date コマンドを使用して、年の通算日を数値として取得できます。

$ 日付 -d "3月18日" +%j
077

上記のコマンドでは、その日付が過去の日付であっても、現在の年の日付が表示されることに注意してください。ただし、コマンドに年を追加することでこれを修正できます。

$ date -d "4月29日" +%j
119
$ date -d "2020年4月29日" +%j
120

閏年の場合、4 月 29 日は 119 日ではなく 120 日になります。

カレンダーに指紋を残さずにクリスマスまでの日数をカウントダウンしたい場合は、次のスクリプトを使用できます。

#!/bin/sh
XMAS=`date -d "12月25日" +%j`
今日 = `日付 +%j`
日数=$(($XMAS - $TODAY))
$DAYSの場合
 0) echo "今日ですね!メリークリスマス!";;
 [0-9]*) echo "残り$DAYS日";;
 -[0-9]*) echo "おっと、見逃してしまいました";;
エサック

このスクリプトでは、12 月 25 日と今日の日付を取得し、それらを減算します。結果が陽性の場合、残り日数を表示します。ゼロの場合は、「メリークリスマス」メッセージが送信され、マイナスの場合は、スクリプトを実行している人に休日を逃していることが通知されます。たぶん彼らはエッグノッグ中毒だったのでしょう。

case ステートメントは、残り時間が 0 の場合、または任意の数値、または - 記号で始まる数値 (つまり、過去) の場合に情報を出力するために使用されるステートメントで構成されます。

人々が注目したい日付であれば、同じアプローチを使用できます。実際にスクリプトを実行している人に日付を指定してもらい、現在からその日付までに何日残っているかを知らせることもできます。スクリプトはこれです。

#!/bin/sh
echo -n "イベントの日付を入力してください (例: 6 月 6 日): "
dtを読む
イベント=`日付 -d "$dt" +%j`
今日 = `日付 +%j`
DAYS=`式 $EVENT - $TODAY`
$DAYSの場合
 0) echo "今日だよ!";;
 [0-9]*) echo "残り$DAYS日";;
 -[0-9]*) echo "おっと、見逃してしまいました";;
エサック

このスクリプトで遭遇する 1 つの問題は、スクリプトを実行する人が翌年の特別な日まであと何日残っているか知りたいと期待すると、がっかりしてしまうことです。日付を入力するときに年を指定しても、 date -dコマンドではその年の日数のみが表示され、現在からその日までの日数は表示されません。

今日から特定の年の日付までの日数を計算するのは少し難しい場合があります。途中の年もすべて含め、閏年も考慮する必要があります。

Unixエポックタイムを使用する

現在から特定の日付までの日数を計算する別の方法は、Unix システムが日付を保存する方法を利用することです。次のスクリプトに示すように、1970 年 1 月 1 日以降の秒数を日数に変換すれば、簡単に実行できます。

#!/bin/bash
echo -n "目標日を入力してください (例: 2021 年 3 月 18 日)> "
ターゲット日付を読む
今日=`echo $(($(date --utc --date "$1" +%s)/86400))`
target=`echo $(($(date --utc --date "$target_date" +%s)/86400))`
days=`式 $target - $today`
echo "$target_date までの日数 $days"

説明すると、86400 は 1 日の秒数です。この数値を Unix エポックの開始からの秒数で割ると、日数が算出されます。

$ ./カウントダウン
目標日を入力してください(例:2021年3月18日)> 2020年3月18日
2020年3月18日まであと104日

要約する

上記は、編集者が紹介したbashを使用して日付をカウントダウンする方法です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。
この記事が役に立ったと思われた方は、ぜひ転載していただき、出典を明記してください。ありがとうございます!

以下もご興味があるかもしれません:
  • bashコマンドの使い方の詳細な説明
  • Bash シェルの組み込みコマンドをすべて一覧表示する方法の例
  • シェルスクリプト実行におけるsource、sh、bash、./の違いの詳細な説明
  • Bash シェルを使用してファイルが存在するかどうかを確認する方法
  • Python スクリプトを使用して Linux で Bash シェルを実装するチュートリアル
  • シェルプログラミング: Bash スペース

<<:  CentOS7 での mysql 5.7.23 のバイナリ インストール

>>:  centos7.2 オフラインインストール mysql5.7.18.tar.gz

推薦する

Linux システム ディスクのフォーマットとスワップ パーティションの手動追加

Windows: NTFS、FATをサポートLinux は次のファイル形式をサポートしています: C...

Dockerコンテナを停止および削除できない問題の解決策

実行中のコンテナIDを見つける ドッカーps上記のコンテナの物理的な場所を見つける /var/lib...

MySQLのインデックスシステムがB+ツリーを使用する理由の分析

目次1. インデックスとは何ですか? 2. インデックスはなぜ必要なのでしょうか? 3. インデック...

Vue の新しいおもちゃ VueUse の具体的な使い方

目次序文VueUseとは使いやすいおなじみの手ぶれ補正やスロットル機能もありますグローバル状態を共有...

MySQL 5.7.18 のダウンロードとインストールの詳細な手順

MySql ダウンロード1. 公式サイトを開き、ダウンロード パスを見つけます。ダウンロード アドレ...

高性能な HTML アプリケーションを作成するためのヒント

Web ページのパフォーマンスを向上させるにはどうすればよいでしょうか?ほとんどの開発者は、Java...

Vue のプラグインとコンポーネントの違いと使い方のまとめ

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

標準SQL更新ステートメントの3つの用途についての簡単な理解

1. 環境: MySQL-5.0.41-win32 Windows XP プロフェッショナル2. テ...

デザイナーの「職業病」について

デザイナーは世界で最も繊細で感情的な人々だと私はいつも感じています。私がこう言うときに優越感を感じる...

Linuxオペレーティングシステムは、タスクマネージャーの視覚化機能を実装するためにPythonを使用しています。

1. Pythonのインストール1. フォルダーを作成します。 mkdir python フォルダ...

MySQLワームレプリケーションの基本知識

ワームは、その名前が示すように、自ら複製し、その数は倍増、つまり指数関数的に増加します。 MySQL...

MySQL5.7 マスタースレーブ構成例の分析

MySQL5.7マスタースレーブ構成の実装方法、具体的な内容は次のとおりですインストール環境:マスタ...

Nginx ログ管理の概要

Nginx ログの説明アクセス ログを通じて、ユーザーの地理的起源、ジャンプ元、使用端末、特定の U...