Cuando comencé a escribir scripts de bash, me di cuenta de que una operación con la que a menudo trato cada script es el manejo de la fecha y la hora. He realizado muchas operaciones, como nombrar un archivo/directorio con la fecha, obtener el resultado de la API y transformar el valor de época a la fecha/hora adecuada para la aplicación, manipular la columna de fecha en archivos CSV, etc. Si es un principiante en Bash scripting, este artículo ayudará a comprender cómo usar el comando de fecha en scripts de Bash, cómo trabajar con fecha y hora usando el comando de fecha en scripts de shell, cómo manipularlos y realizar varias operaciones con él en Linux.
Debe tener una comprensión básica de cómo se establece la fecha y la hora de un sistema. El administrador del servidor se encargará principalmente de esta parte en su trabajo.
Pero si usted es un usuario individual y usa Linux en su máquina personal, entonces debe comprender cómo se configuran la fecha y la hora, las formas de sincronizarlas y cómo modificarlas.
Linux utiliza dos relojes para mantener la hora sincronizada.
- Reloj en tiempo real - Este es un reloj integrado en la placa base de su sistema y funcionará incluso si apaga la máquina.
- Reloj del sistema - Esto será manejado por el kernel de Linux y durante el arranque del sistema, el kernel obtendrá la hora inicial del reloj en tiempo real.
No voy a pasar por el proceso de establecer una fecha y hora, ese es un tema aparte para discutir. Comencemos a analizar la parte central de este artículo sobre cómo usar la date
comando en secuencias de comandos Bash en Linux.
Obtención de ayuda
Primero, puede verificar la ubicación binaria de la date
comando ejecutando el siguiente comando.
$ which date /usr/bin/date
La date
El comando no es un shell incorporado sino un programa externo. Puede obtener esa información ejecutando el type
comando.
$ type -a date date is /usr/bin/date date is /bin/date
Hay muchas opciones para trabajar y recordar todo no es posible y aquí es donde la ayuda y la página de manual serán útiles.
Ejecute el siguiente comando para acceder a la página de manual de date
comando.
$ man date
Ejecute el siguiente comando para acceder al mensaje de ayuda.
$ date --help
Imprimir fecha y hora actuales
Inicie su terminal y simplemente ejecute date
dominio. Obtendrá la fecha actual junto con la hora y la zona horaria. En mi caso, he configurado la zona horaria como IST durante la instalación de mi sistema operativo.
$ date Sunday 13 February 2022 11:27:17 AM IST
También puede obtener la fecha y la hora en UTC zona horaria usando -u
bandera.
$ date -u Sunday 13 February 2022 05:57:36 AM UTC
Conversión de zona horaria
Puede obtener la salida de la date
Comando en diferentes zonas horarias configurando la variable ambiental TZ . He configurado la TZ en Moscú y Singapur 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 obtener la lista de zonas horarias ejecutando "timedatectl
" comando.
$ timedatectl list-timezones
$ timedatectl list-timezones | grep -i singapore
Asia/Singapore
Singapore
$ timedatectl list-timezones | grep -i moscow
Europe/Moscow
Hora de la última modificación de un archivo
Normalmente, usamos el stat
Comando para comprobar la hora de modificación de un archivo. Lo mismo se puede comprobar con la date
comando usando -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 el stat
el formato de salida del comando es diferente de la date
comando, pero ambos tienen el mismo propósito.
Diferentes opciones de formato
La date
El comando admite opciones de formato y al usar estas opciones puede formatear su date
ordene que la salida esté en cualquier formato que desee o puede tomar solo el valor particular de la salida.
Abra la date
página de manual del comando y busque la sección como se muestra en la imagen de abajo.
Hay muchas opciones de formato, pero no todas serán útiles. Veremos algunas de las opciones de formato importantes y entenderemos cómo funciona.
Por defecto, la date
El comando mostrará la fecha y la hora. ¿Qué sucede si desea imprimir solo la fecha o la hora?
$ date
Sunday 13 February 2022 11:27:17 AM IST
Para obtener solo la fecha, puede usar el %F
bandera o %D
bandera.
$ date +%F
2021-11-16
$ date +%D
02/13/22
Cuando esté utilizando banderas de formateador, debe prefijarlo con +
símbolo como lo hice en los ejemplos anteriores.
- La salida del
%F
la bandera estará en YYYY-MM-DD formato. - La salida del
%D
la bandera estará en MM/DD/YY formato.
Puede tomar el día, el mes y el año individualmente y crear su propia salida con 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 la fecha, también puede obtener el tiempo a solas usando %r
(formato de 12 horas) o %T
(formato de 24 horas) banderas.
$ date +%r # 12 hour format
11:24:12 PM IST
$ date +%T # 24 hour format
23:24:11
Puede tomar 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 del script, lo nombraré con la fecha de hoy. Así que me será útil echarle un vistazo cuando sea necesario.
Hasta ahora hemos visto cómo trabajar con fecha y hora individualmente. A veces, es posible que desee mostrar tanto la fecha como la hora. En ese caso, puede combinar la fecha y la hora como se indica a continuación o crear su propia salida con formato.
$ date "+%F %r"
2021-11-16 11:29:06 PM IST
Ejecutar script solo en ciertos días
En algunos casos, es posible que desee ejecutar su secuencia de comandos solo en un determinado día de la semana. Por ejemplo, si quiero que mi secuencia de comandos se ejecute solo el viernes, puedo usar %A
(viernes) o %a
(Viernes) y escriba la lógica 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. Consulte la página del manual y explórelos todos.
Almacenamiento de resultados en una variable
Al escribir scripts, es una buena práctica almacenar el resultado de la date
comando a una variable y use la variable en el script. Uno de esos escenarios será crear el nombre del archivo con la fecha y la hora.
Eche un vistazo al siguiente ejemplo donde la fecha de hoy se almacenará en la variable TDY
y lo mismo se usa para crear un nombre de archivo "disk_usage_${TDY}.txt
" que almacenará la salida de "df -h
" comando.
$ 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
Usando -d
o --date
Bandera
Esta es una característica importante que más me gusta con la date
dominio. Puede pasar la cadena como argumento a -d
o --date
bandera y obtendrá la salida en el formato predeterminado.
Echa un vistazo a los siguientes ejemplos. He pasado argumentos de cadena como "today
", "yesterday
", "tomorrow
", "last Thursday
", "Today (+,-) 20 years
" al --date
bandera. El comando de 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 no sean los que he mostrado en el ejemplo anterior.
Epoca Tiempo
La hora de época se puede convertir al formato de fecha y hora actual usando -d
o --date
bandera. El %s
la salida de la bandera estará en formato de época.
$ date +%s
1644737777
Para convertirlo al formato estándar legible por humanos, agregue @
seguido de la hora de la é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 combinar los formateadores junto 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
Conclusión
En este artículo, discutimos cómo usar la date
Comando en secuencias de comandos Bash con ejemplos. En este momento, deberías sentirte cómodo usando la date
comando en sus guiones. Hay muchas opciones de formato disponibles, pruébelas y familiarícese con ellas.
Si tiene algún comentario o sugerencia sobre este artículo, háganoslo saber a través de la sección de comentarios a continuación.
Guías de secuencias de comandos de Bash:
- Cómo depurar scripts Bash en Linux y Unix
- Bash Scripting:análisis de argumentos en Bash Scripts mediante getopts
- Cómo crear cuadros de diálogo GUI en secuencias de comandos Bash con Zenity en Linux y Unix
- Secuencias de comandos de Bash:declaración de caso
- Secuencias de comandos de Bash:declaraciones condicionales
- Bash Scripting:manipulación de cadenas
- Secuencias de comandos de Bash:comando Printf explicado con ejemplos
- Bash Scripting:matriz indexada explicada con ejemplos
- Secuencias de comandos de Bash:matriz asociativa explicada con ejemplos
- Secuencias de comandos de Bash:bucle For explicado con ejemplos
- Secuencias de comandos de Bash:ciclo while y till explicado con ejemplos
- Redireccionamiento de Bash explicado con ejemplos
- Secuencias de comandos de Bash:variables explicadas con ejemplos
- Bash Scripting:funciones explicadas con ejemplos
- Comando Bash Echo explicado con ejemplos en Linux
- Tutorial de Bash Heredoc para principiantes