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