如何在 Linux 中的 Bash 脚本中使用日期命令

当我开始写作 bash 脚本,我意识到我经常处理每个脚本的一个操作是处理日期和时间。 我已经完成了许多操作,例如使用日期命名文件/目录、获取 API 结果、将纪元值转换为适合应用程序的日期/时间、操作 CSV 文件中的日期列等。如果您是 Bash 脚本的初学者,本文将帮助您了解如何在 Bash 脚本中使用 date 命令,如何在 shell 脚本中使用 date 命令处理日期和时间,如何在 Linux 中操作它们并使用它进行各种操作。

您应该对如何设置系统日期和时间有一个基本的了解。 这部分将主要由服务器处理 admin 在你的工作中。

但是,如果您是个人用户并且在您的个人计算机中使用 Linux,那么您应该了解如何设置日期和时间、同步它们的方法以及如何修改它。

Linux 使用两个时钟来保持时间同步。

  • 实时时钟 – 这是一个集成在系统主板中的时钟,即使您关闭机器也会运行。
  • 系统时钟 – 这将由 Linux 内核处理,并且在系统启动期间内核将从实时时钟获取初始时间。

我不会经历设置日期和时间的过程,这是一个单独的话题来讨论。 让我们开始研究本文的核心部分,了解如何使用 date Linux 中的 Bash 脚本中的命令。

获得帮助

首先,您可以检查的二进制位置 date 通过运行以下命令来命令。

$ which date
/usr/bin/date

date command 不是内置的shell,而是外部程序。 您可以通过运行 type 命令。

$ type -a date
date is /usr/bin/date
date is /bin/date

有很多选项可以使用,记住所有内容是不可能的,这就是帮助和手册页派上用场的地方。

运行以下命令访问手册页 date 命令。

$ man date

运行以下命令以访问帮助消息。

$ date --help

启动您的终端并简单地运行 date 命令。 您将获得当前日期以及时间和时区。 就我而言,我已将时区设置为 IST 在我的操作系统安装期间。

$ date
Sunday 13 February 2022 11:27:17 AM IST

您还可以在 世界标准时间 时区使用 -u 旗帜。

$ date -u
Sunday 13 February 2022 05:57:36 AM UTC

时区转换

你可以得到的输出 date 通过设置环境变量在不同时区执行命令 太极. 我已将 TZ 设置为 莫斯科新加坡 下面的时区 example.

$ 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 命令将显示日期和时间。 如果您只想打印日期或时间怎么办?

$ 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 标志将在 月/日/年 格式。

您可以单独获取日、月和年,并创建自己的新格式输出。

$ 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

仅在特定日期运行脚本

在某些情况下,您可能只想在一周中的某一天运行脚本。 为了 example,如果我希望我的脚本只在星期五运行,那么我可以使用 %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 命令到一个变量并在脚本中使用该变量。 一种这样的情况是创建带有日期和时间的文件名。

看看下面 example 今天的日期将存储在变量中 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“, “yesterday“, “tomorrow“, “last Thursday“, “Today (+,-) 20 years“对 --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

除了我在上面显示的内容之外,您还可以传递更多的相对字符串参数 example.

纪元时间

纪元时间可以使用 -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 脚本 – While 和 until 循环用示例解释
  • 用示例解释 Bash 重定向
  • Bash 脚本——用例子解释的变量
  • Bash 脚本——用例子解释的函数
  • 用 Linux 中的示例解释 Bash Echo 命令
  • Bash Heredoc 初学者教程