Tutoriales

Uso de comandos de fecha en Bash Scripts para Linux

Cuando comencé a escribir scripts bash, me di cuenta de que una de las cosas que suelo hacer con cada script es la fecha y la hora. He hecho muchas cosas como nombrar archivos/directorios con fechas, obtener resultados de API, convertir valores de época a fecha/hora adecuada para la aplicación, manipular columnas de fecha en archivos CSV, etc. Si es un principiante en las secuencias de comandos de Bash, este artículo lo ayudará a comprender cómo usar el comando de fecha en las secuencias de comandos de Bash, cómo usar el comando de fecha en las secuencias de comandos de shell para trabajar con fechas y horas, cómo manipularlas en Linux y hacer varios cosas con eso

Debe tener una comprensión básica de cómo configurar la fecha y la hora del sistema. Esta parte la maneja principalmente el administrador del servidor en su trabajo.

Sin embargo, si usted es un usuario individual y usa Linux en su computadora personal, entonces debe saber cómo configurar la fecha y la hora, cómo sincronizarlas y cómo modificarlas.

Linux usa dos relojes para mantener el tiempo sincronizado.

  • Reloj en tiempo real – Este es un reloj integrado en la placa del sistema que funcionará incluso si apaga la máquina.
  • reloj del sistema – Esto será manejado por el kernel de Linux y el kernel obtendrá la hora inicial del reloj en tiempo real durante el arranque del sistema.

No pasaré por el proceso de establecer la fecha y la hora, ese es un tema aparte para discutir.Comencemos a trabajar en la parte central de este artículo para entender cómo usar date Comandos en Bash Scripts en Linux.

consigue ayuda

Primero, puede verificar la ubicación binaria de date Ordene ejecutando el siguiente comando.

$ which date
/usr/bin/date

Esta date El comando no es un shell incorporado, sino un programa externo.Puedes hacer esto ejecutando type Pedido.

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

Hay tantas opciones con las que jugar que es imposible recordarlo todo, y ahí es donde la ayuda y las páginas man resultan útiles.

Ejecute el siguiente comando para acceder a la página del manual date Pedido.

$ man date

Ejecute el siguiente comando para acceder a los mensajes de ayuda.

$ date --help

Encienda su terminal y simplemente ejecute date Pedido. Obtendrá la fecha actual junto con la hora y la zona horaria.En mi caso he puesto la zona horaria a durante la instalación de mi sistema operativo.

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

Tú también puedes UTC uso de la zona horaria -u bandera.

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

conversión de zona horaria

puedes obtener la salida date Ejecute comandos en diferentes zonas horarias configurando variables de entorno Tai ChiHe configurado TZ en Moscú y Singapur La zona horaria en el siguiente ejemplo.

$ 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

Puede hacer esto ejecutando «timedatectl» Pedido.

$ timedatectl list-timezones
$ timedatectl list-timezones | grep -i singapore
Asia/Singapore
Singapore
$ timedatectl list-timezones | grep -i moscow
Europe/Moscow

Última hora de modificación del archivo

Usualmente, usamos stat comando para comprobar la hora de modificación de un archivo.también verifique date uso de comandos -r bandera.

$ 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

puedes ver stat El formato de salida del comando es diferente de date comando, pero ambos tienen el mismo propósito.

diferentes opciones de formato

Esta date El comando admite opciones de formato con las que puede formatear su date La salida del comando está en el formato que desee, o solo puede obtener valores específicos de la salida.

Abierto date La página de manual para el comando y busque la sección que se muestra en la imagen a continuación.

Opciones de formato de comando de fecha

Hay muchas opciones de formato, pero no todas son útiles. Veremos algunas opciones de formato importantes y veremos cómo funciona.

por defecto, date El comando mostrará la fecha y la hora. ¿Qué sucede si solo desea imprimir la fecha o la hora?

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

Para obtener solo la fecha que puede usar %F firmar o %D bandera.

$ date +%F
2021-11-16
$ date +%D
02/13/22

Cuando usa la bandera del formateador, debe prefijarla con + Como hice en el ejemplo anterior.

  • salida de %F el logotipo estará en AAAA-MM-DD Formato.
  • salida de %D el logotipo estará en mes día año Formato.

Puede obtener el día, el mes y el año individualmente y crear su propia salida de formato nuevo.

$ date +%Y
2022
$ date +%m
02
$ date +%d
13

Para crear su propia salida con formato, simplemente combine todas las banderas que se muestran a continuación.

$ date +%Y_%m_%d
2022_02_13

Similar a las fechas, también puede usar %r(reloj de 12 horas) o %T(formato de 24 horas) firmar.

$ date +%r # 12 hour format
11:24:12 PM IST
$ date +%T # 24 hour format
23:24:11

Puede obtener horas, minutos, segundos individualmente y crear su propia salida formateada.

$ date +%H
12
$ date +%M
24
$ date +%S
03

Combine todas las banderas anteriores y cree una salida personalizada.

$ date +%H_%M_%S
12_26_53

Ahora, ¿dónde ayudan estas opciones de formato personalizado? Para mí, cuando creo cualquier archivo como parte de un script, lo nombro con la fecha de hoy. Así que es útil para mí mirarlo cuando lo necesito.

Hasta ahora, hemos visto cómo las fechas y las horas se manejan individualmente. A veces, es posible que desee mostrar tanto la fecha como la hora. En este caso, puede combinar la fecha y la hora como se muestra a continuación, o crear su propia salida con formato.

$ date "+%F %r"
2021-11-16 11:29:06 PM IST

Ejecute el script solo en días específicos

En algunos casos, es posible que solo desee ejecutar el script en un determinado día de la semana.Por ejemplo, si quiero que mi script solo se ejecute los viernes, entonces puedo usar %A(viernes) o %a(Viernes) está marcado y la lógica se escribe en consecuencia.

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

Hay más opciones de formato disponibles. Vea las páginas del manual y navegue por ellas.

almacenar salida a variable

Al crear secuencias de comandos, es mejor almacenar date comando a una variable y use esa variable en el script. Uno de esos casos es crear un nombre de archivo con fecha y hora.

Eche un vistazo al ejemplo a continuación, la fecha de hoy se almacenará en una variable TDY Lo mismo se usa para crear nombres de archivos»disk_usage_${TDY}.txt«almacenará»df -h» Pedido.

$ 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

usar -d o --date bandera

Esta es una de mis grandes características favoritas. date Pedido.Puede pasar cadenas como parámetros a -d o --date bandera y obtendrá la salida en el formato predeterminado.

Eche un vistazo al ejemplo a continuación. He pasado el parámetro de cadena como «today«, «yesterday«, «tomorrow«, «last Thursday«, «Today (+,-) 20 years«Correcto --date bandera. El comando Fecha interpretará estas cadenas y convertirá la salida a su formato predeterminado.

$ 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

Puede pasar más argumentos de cadena relativos que los que he mostrado en el ejemplo anterior.

tiempo de epoca

Se puede usar el tiempo de época -d o --date bandera.Esta %s La salida de banderas estará en formato de época.

$ date +%s
1644737777

Para convertirlo a un formato estándar legible por humanos, agregue @ Luego tiempo de época, como se muestra a continuación.

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

En todos los ejemplos anteriores, puede ver que se muestra la salida predeterminada.Puede utilizar el formateador con -d o --date marca para obtener una salida personalizada.

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

en conclusión

En este artículo, discutimos cómo usar date Comandos en un script Bash con ejemplos.En este punto, debería poder usar fácilmente date comandos en el script. Hay muchas opciones de formato disponibles, pruébelas y familiarícese con ellas.

Si tiene algún comentario o sugerencia para este artículo, háganoslo saber a través de la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba