当我开始写作 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
命令。 您将获得当前日期以及时间和时区。 就我而言,我已将时区设置为 是 在我的操作系统安装期间。
$ date Sunday 13 February 2022 11:27:17 AM IST
您还可以在 世界标准时间 时区使用 -u
旗帜。
$ date -u Sunday 13 February 2022 05:57:36 AM UTC
时区转换
你可以得到的输出 date
通过设置环境变量在不同时区执行命令 太极. 我已将 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
命令将显示日期和时间。 如果您只想打印日期或时间怎么办?
$ 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
仅在特定日期运行脚本
在某些情况下,您可能只想在一周中的某一天运行脚本。 例如,如果我希望我的脚本只在星期五运行,那么我可以使用 %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
命令到一个变量并在脚本中使用该变量。 一种这样的情况是创建带有日期和时间的文件名。
看看下面的例子,今天的日期将存储在变量中 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
除了我在上面的示例中显示的内容之外,您还可以传递更多的相对字符串参数。
纪元时间
纪元时间可以使用 -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 初学者教程
BASHBash 脚本Bash 教程CLI命令行日期命令LinuxLinux 基础Linux 命令Linux howtoShell 脚本shell 脚本