GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser la commande de date dans les scripts bash sous Linux

Lorsque j'ai commencé à écrire des scripts bash, j'ai réalisé qu'une opération à laquelle je m'occupe souvent de chaque script est la gestion de la date et de l'heure. J'ai effectué de nombreuses opérations telles que nommer un fichier/répertoire avec la date, récupérer le résultat de l'API et transformer la valeur d'époque en date/heure adaptée à l'application, manipuler la colonne de date dans les fichiers CSV, etc. Si vous êtes un débutant pour les scripts Bash, cet article vous aidera à comprendre comment utiliser la commande date dans les scripts Bash, comment travailler avec la date et l'heure à l'aide de la commande date dans les scripts shell, comment les manipuler et effectuer diverses opérations avec sous Linux.

Vous devez avoir une compréhension de base de la façon dont une date et une heure système sont définies. Cette partie sera principalement prise en charge par l'administrateur du serveur dans votre travail.

Mais si vous êtes un utilisateur individuel et que vous utilisez Linux sur votre ordinateur personnel, vous devez comprendre comment la date et l'heure sont définies, comment les synchroniser et comment les modifier.

Il existe deux horloges utilisées par Linux pour maintenir la synchronisation de l'heure.

  • Horloge en temps réel - Il s'agit d'une horloge intégrée à la carte mère de votre système et qui fonctionnera même si vous éteignez la machine.
  • Horloge système - Cela sera géré par le noyau Linux et pendant le démarrage du système, le noyau obtiendra l'heure initiale de l'horloge en temps réel.

Je ne vais pas passer par le processus de mise en place d'une date et d'une heure, c'est un sujet distinct à discuter. Commençons à examiner la partie centrale de cet article sur la façon d'utiliser la date commande dans les scripts Bash sous Linux.

Obtenir de l'aide

Tout d'abord, vous pouvez vérifier l'emplacement binaire de la date commande en exécutant la commande suivante.

$ which date
/usr/bin/date

La date La commande n'est pas un shell intégré mais un programme externe. Vous pouvez obtenir ces informations en exécutant le type commande.

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

Il existe de nombreuses options avec lesquelles travailler et se souvenir de tout n'est pas possible et c'est là que l'aide et la page de manuel seront utiles.

Exécutez la commande suivante pour accéder à la page de manuel de date commande.

$ man date

Exécutez la commande suivante pour accéder au message d'aide.

$ date --help

Imprimer la date et l'heure actuelles

Lancez votre terminal et lancez simplement le date commande. Vous obtiendrez la date actuelle ainsi que l'heure et le fuseau horaire. Dans mon cas, j'ai défini le fuseau horaire sur IST lors de l'installation de mon système d'exploitation.

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

Vous pouvez également obtenir la date et l'heure au format UTC fuseau horaire en utilisant le -u drapeau.

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

Conversion de fuseau horaire

Vous pouvez obtenir la sortie de la date commande dans différents fuseaux horaires en définissant la variable d'environnement TZ . J'ai défini le TZ sur Moscou et Singapour fuseau horaire dans l'exemple ci-dessous.

$ 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

Vous pouvez obtenir la liste des fuseaux horaires en exécutant le "timedatectl " commande.

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

Heure de la dernière modification d'un fichier

Normalement, nous utilisons le stat commande pour vérifier l'heure modifiée d'un fichier. La même chose peut être vérifiée avec la date commande en utilisant le -r drapeau.

$ 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

Vous pouvez voir la stat le format de sortie de la commande est différent de la date commande, mais les deux ont le même but.

Différentes options de formatage

La date La commande prend en charge les options de formatage et en utilisant ces options, vous pouvez formater votre date la sortie de la commande doit être dans le format de votre choix ou vous pouvez saisir uniquement la valeur particulière de la sortie.

Ouvrez la date la page de manuel de la commande et recherchez la section comme indiqué dans l'image ci-dessous.

Il existe de nombreuses options de formatage, mais toutes ne seront pas utiles. Nous verrons certaines des options de formatage importantes et comprendrons comment cela fonctionne.

Par défaut, la date La commande affichera la date et l'heure. Que faire si vous souhaitez imprimer uniquement la date ou l'heure ?

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

Pour obtenir uniquement la date, vous pouvez utiliser le %F indicateur ou %D drapeau.

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

Lorsque vous utilisez des indicateurs de formatage, vous devez le préfixer avec + symbole comme je l'ai fait dans les exemples ci-dessus.

  • La sortie du %F le drapeau sera en AAAA-MM-JJ formater.
  • La sortie de %D le drapeau sera en MM/DD/YY formater.

Vous pouvez saisir le jour, le mois et l'année individuellement et créer votre propre nouvelle sortie formatée.

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

Pour créer votre propre sortie formatée, combinez simplement tous les drapeaux ci-dessous.

$ date +%Y_%m_%d
2022_02_13

Semblable à la date, vous pouvez également obtenir le temps seul en utilisant %r (format 12 heures) ou %T (format 24 heures).

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

Vous pouvez saisir des heures, des minutes, des secondes individuellement et créer votre propre sortie formatée.

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

Combinez tous les indicateurs ci-dessus et créez une sortie personnalisée.

$ date +%H_%M_%S
12_26_53

À quoi servent ces options de mise en forme personnalisée ? Pour moi, lorsque je crée des fichiers dans le cadre du script, je le nommerai avec la date d'aujourd'hui. Il me sera donc utile d'y jeter un œil en cas de besoin.

Jusqu'à présent, nous avons vu comment travailler avec la date et l'heure individuellement. Parfois, vous souhaiterez peut-être afficher à la fois la date et l'heure. Dans ce cas, vous pouvez combiner la date et l'heure comme ci-dessous ou créer votre propre sortie formatée.

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

Exécuter le script uniquement certains jours

Dans certains cas, vous souhaiterez peut-être exécuter votre script uniquement un certain jour de la semaine. Par exemple, si je veux que mon script ne s'exécute que le vendredi, je peux utiliser %A (vendredi) ou %a (Fri) drapeaux et écrivez la logique en conséquence.

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

D'autres options de formatage sont disponibles. Reportez-vous à la page de manuel et explorez-les tous.

Stocker la sortie dans une variable

Lors de l'écriture de scripts, il est recommandé de stocker la sortie de la date commande à une variable et utilisez la variable dans le script. Un tel scénario consistera à créer le nom du fichier avec la date et l'heure.

Jetez un oeil à l'exemple ci-dessous où la date d'aujourd'hui sera stockée dans la variable TDY et le même est utilisé pour créer un nom de fichier "disk_usage_${TDY}.txt " qui stockera la sortie de "df -h " commande.

$ 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

Utiliser -d ou --date Drapeau

C'est une caractéristique importante que j'aime le plus avec la date commande. Vous pouvez passer la chaîne comme argument à -d ou --date flag et vous obtiendrez la sortie dans le format par défaut.

Jetez un œil aux exemples ci-dessous. J'ai passé des arguments de chaîne comme "today ", "yesterday ", "tomorrow ", "last Thursday ", "Today (+,-) 20 years " au --date drapeau. La commande Date interprétera ces chaînes et convertira la sortie dans son format par défaut.

$ 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

Vous pouvez passer plus d'arguments de chaîne relatifs autres que ce que j'ai montré dans l'exemple ci-dessus.

Heure d'époque

L'heure d'époque peut être convertie au format de date et d'heure actuel en utilisant le -d ou --date drapeau. Le %s la sortie du drapeau sera au format d'époque.

$ date +%s
1644737777

Pour le convertir au format standard lisible par l'homme, ajoutez @ suivi de l'heure comme indiqué ci-dessous.

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

Dans tous les exemples ci-dessus, vous pouvez voir que la sortie par défaut est affichée. Vous pouvez combiner les formateurs avec le -d ou --date drapeau pour obtenir une sortie personnalisée.

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

Conclusion

Dans cet article, nous avons expliqué comment utiliser la date commande dans les scripts Bash avec des exemples. À ce stade, vous devriez être à l'aise avec l'utilisation de la date commande dans vos scripts. De nombreuses options de formatage sont disponibles, testez-les et familiarisez-vous avec elles.

Si vous avez des commentaires ou des suggestions à propos de cet article, faites-le nous savoir via la section des commentaires ci-dessous.

Guides de script bash :

  • Comment déboguer les scripts Bash sous Linux et Unix
  • Scripts bash :analyse des arguments dans les scripts bash à l'aide de getops
  • Comment créer des boîtes de dialogue GUI dans des scripts Bash avec Zenity sous Linux et Unix
  • Scripts bash – Énoncé de cas
  • Scripts bash – Instructions conditionnelles
  • Scripts bash – Manipulation de chaînes
  • Scripts bash – Explication de la commande Printf à l'aide d'exemples
  • Scripts bash – Tableau indexé expliqué à l'aide d'exemples
  • Scripts bash - Tableau associatif expliqué avec des exemples
  • Scripts bash – Explication de la boucle For avec des exemples
  • Scripts bash :boucle While et Until expliquée à l'aide d'exemples
  • La redirection bash expliquée avec des exemples
  • Scripts bash – Variables expliquées à l'aide d'exemples
  • Scripts bash – Fonctions expliquées à l'aide d'exemples
  • La commande Bash Echo expliquée avec des exemples sous Linux
  • Tutoriel Bash Heredoc pour les débutants

Linux
  1. Comment utiliser la commande Linux grep

  2. Comment utiliser la commande history sous Linux

  3. Comment utiliser la commande Su sous Linux

  4. Comment utiliser la commande Uptime dans Ubuntu Linux

  5. Comment utiliser la commande d'écran Linux

Comment utiliser du Command sous Linux

Comment utiliser la commande Declare dans Linux Bash Shell

Comment utiliser la commande echo dans les scripts Bash sous Linux

Comment utiliser la commande sysctl sous Linux

Comment utiliser la commande d'arrêt de Linux

Comment utiliser grep sous Linux