Используйте команду Date в сценариях Bash в Linux
Работа с датой и временем с использованием команды Date в сценариях Bash
Когда я начал писать сценарии bash, я понял, что одна операция, с которой я часто сталкиваюсь в каждом сценарии, — это обработка даты и времени. Я выполнил множество операций, таких как присвоение имени файлу/каталогу даты, получение результата API и преобразование значения эпохи в дату/время, подходящее для приложения, манипулирование столбцом даты в файлах CSV и т. д. Если вы новичок в написании сценариев Bash, эта статья поможет понять, как использовать команду date в сценариях Bash, как работать с датой и временем с помощью команды date в сценариях оболочки, как манипулировать ими и выполнять различные действия. операции с ним в Linux.
Вы должны иметь общее представление о том, как устанавливаются системные дата и время. Об этой части в вашей работе в основном позаботится администратор сервера.
Но если вы индивидуальный пользователь и используете Linux на своем личном компьютере, то вы должны понимать, как устанавливаются дата и время, способы их синхронизации и способы их изменения.
Для синхронизации времени в Linux используются два часа.
- Часы реального времени. Это часы, встроенные в материнскую плату вашей системы, которые будут работать, даже если вы выключите компьютер.
- Системные часы. Это будет обрабатываться ядром Linux, и во время загрузки системы ядро получит начальное время от часов реального времени.
Я не буду подробно останавливаться на настройке даты и времени, это отдельная тема для обсуждения. Давайте начнем изучать основную часть этой статьи о том, как использовать команду date
в сценариях Bash в Linux.
Получать помощь
Во-первых, вы можете проверить двоичное расположение команды date
, выполнив следующую команду.
which date
/usr/bin/date
Команда date
— это не встроенная оболочка, а внешняя программа. Эту информацию можно получить, выполнив команду 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. В приведенном ниже примере я установил часовой пояс Москва и Сингапур.
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
будет в формате ГГГГ-ММ-ДД. - Вывод флага
%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
, и вы получите выходные данные в формате по умолчанию.
Взгляните на приведенные ниже примеры. Я передал строковые аргументы как «сегодня
», «вчера
», «завтра
», «в прошлый четверг
». , «Сегодня (+,-) 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:
- Как отлаживать сценарии Bash в Linux и Unix
- Сценарии Bash: анализ аргументов в сценариях Bash с помощью getopts
- Как создавать диалоговые окна графического пользовательского интерфейса в сценариях Bash с помощью Zenity в Linux и Unix
- Сценарии Bash – утверждение случая
- Сценарии Bash – условные операторы
- Скрипты Bash: манипулирование строками
- Сценарии Bash: команда Printf с примерами
- Скрипты Bash: индексированные массивы с примерами
- Скрипты Bash: объяснение ассоциативных массивов на примерах
- Скрипты Bash: цикл For с примерами
- Скрипты Bash: циклы while и Until с примерами
- Перенаправление Bash, объясненное примерами
- Скрипты Bash: переменные, поясняемые примерами
- Скрипты Bash: функции, поясняемые примерами
- Команда Bash Echo с примерами для Linux
- Руководство по Bash Heredoc для начинающих