Поиск по сайту:

Используйте команду 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 для начинающих

Статьи по данной тематике