如何在 Linux 中的 Bash 脚本中使用日期命令处理日期和时间

本文将帮助理解如何在 Bash 脚本中使用 date 命令,如何在 shell 脚本中使用 date 命令处理日期和时间,如何在 Linux 中操作它们并使用它进行各种操作。

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

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

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

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

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

获得帮助

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

$ which date
/usr/bin/date

该date命令不是内置的 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

您还可以使用该标志获取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命令的手册页并查找如下图所示的部分。

如何在 Linux 中的 Bash 脚本中使用日期命令处理日期和时间

有很多格式化选项,但并非所有选项都有用。我们将看到一些重要的格式化选项并了解它是如何工作的。

默认情况下,该date命令将显示日期和时间。如果您只想打印日期或时间怎么办?

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

要仅获取日期,您可以使用%Fflag 或%Dflag。

$ 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(Friday) 或%a(Fri) 标志并相应地编写逻辑。

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命令的输出存储到一个变量中并在脚本中使用该变量。一种这样的情况是创建带有日期和时间的文件名。

看看下面的例子,今天的日期将存储在变量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

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

纪元时间

纪元时间可以使用-dor–date标志转换为当前日期和时间格式。%s标志输出将采用纪元格式。

$ date +%s
1644737777

要将其转换为标准的人类可读格式,请添加@后跟纪元时间,如下所示。

$ date --date @1644737777
Sunday 13 February 2022 01:06:17 PM IST

在上述所有示例中,您可以看到显示的是默认输出,您可以将格式化程序与-dor–date标志结合起来以获得自定义输出。

$ date --date "Today + 20 years" +%Y
2042
$ date --date "Today + 21 years" +%s
2275890194
$ date --date @2275890194 +%Y
2042 

结论

在本文中,我们date通过示例讨论了如何在 Bash 脚本中使用该命令,此时,您应该可以在date脚本中使用该命令了,有很多可用的格式化选项,测试并熟悉它们。

THE END
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容