GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de la commande Bash printf pour imprimer des sorties formatées

La façon la plus simple d'imprimer en ligne de commande Linux est d'utiliser la commande echo.

echo "Value of var is $var"

Cependant, la commande echo ne sera pas adéquate lorsque vous devez imprimer une sortie formatée.

C'est là que la commande printf vous aide. La commande bash printf fonctionne comme la commande printf dans le langage de programmation C/C++.

printf "My brother %s is %d years old.\n" Prakash 21

Pouvez-vous deviner le résultat ?

Le premier argument %s attend une chaîne, %d attend un entier décimal, tout comme C/C++. Ne vous inquiétez pas si vous n'êtes pas familier avec C/C++.

Vous n'avez pas besoin de l'apprendre uniquement pour utiliser la commande printf dans vos scripts Bash. Laissez-moi vous montrer quelques exemples de la commande Bash printf.

Utilisation de la commande Bash printf

Commençons d'abord par la syntaxe.

printf format [arguments]

Ici, format est une chaîne qui détermine comment les valeurs suivantes seront affichées.

Dans l'exemple printf "My brother %s is %d years old.\n" Prakash 21 , l'ensemble "Mon frère %s a %d ans.\n" est au format et il est suivi des arguments Prakash et 21 . Les arguments sont utilisés pour remplacer les spécificateurs de format (%s, %d etc) que j'expliquerai plus tard dans cet article.

Dans sa forme la plus simple, printf peut être utilisé comme commande echo pour afficher une chaîne.

printf "Hello World\n"

Remarquez le nouveau caractère de ligne \n à la fin? La différence entre la commande echo et printf est que echo ajoute automatiquement un caractère de nouvelle ligne à la fin mais pour printf, vous devez l'ajouter explicitement.

Attention particulière au type et au nombre d'arguments

Gardez à l'esprit que la chaîne de format essaie d'être appliquée à tous les arguments. C'est pourquoi vous devez y porter une attention particulière.

[email protected]:~$ printf "Hello, %s! \n" Abhishek Prakash
Hello, Abhishek! 
Hello, Prakash!

De même, vous devez également faire attention au type de spécificateur de format attendu dans la chaîne de format.

Comme vous pouvez le voir dans l'exemple ci-dessus, s'il ne trouve pas les arguments voulus, il affiche les valeurs par défaut qui sont null pour les chaînes et 0 pour les entiers.

printf "Hi %s, your room number is %d. \n" Abhishek Prakash 131
bash: printf: Prakash: invalid number
Hi Abhishek, your room number is 0. 
Hi 131, your room number is 0.

Ici, il faut Abhishek Prakash comme premier ensemble d'arguments et 131 comme deuxième ensemble d'arguments.

Lorsqu'il trouve une chaîne (Prakash) au lieu d'un entier, il se plaint mais il continue d'afficher la sortie avec le deuxième argument à sa valeur par défaut 0.

De même, il voit 131 comme une chaîne dans le deuxième ensemble d'arguments et puisque le deuxième argument est absent, il prend par défaut la valeur 0.

Caractères de spécification de format

Plusieurs spécificateurs de format sont disponibles pour vous permettre d'afficher votre sortie dans le format souhaité. Voici quelques-uns des plus courants :

Personnage Utilisation
%s Chaîne
%c Caractère unique
%d Entiers
%o Entiers octaux
%x Entiers hexadécimaux
%f Point flottant
%b Chaîne avec caractère d'échappement antislash
%% Signe de pourcentage

Maintenant que vous êtes familiarisé avec le spécificateur de format, voyons d'autres exemples qui les montrent en action.

Exemples de commandes bash printf

Je ne pense pas que vous ayez besoin d'explications détaillées pour la plupart de ces exemples car ils sont explicites.

[email protected]:~$ printf "The octal value of %d is %o\n" 30 30
The octal value of 30 is 36

Voyons l'utilisation du %b spécificateur pour interpréter correctement le caractère échappé de la barre oblique inverse.

[email protected]:~$ printf "String with backslash: %s\n" "Hello\nWorld!"
String with backslash: Hello\nWorld!

Vous voyez pour %s , ça ne fait aucune différence. Mais avec %b le nouveau caractère d'échappement de ligne sera correctement interprété :

[email protected]:~$ printf "String with backslash: %b\n" "Hello\nWorld!"
String with backslash: Hello
World!

Lorsque vous utilisez le %c , il ne lit qu'un seul caractère à la fois.

[email protected]:~$ printf "Character: %c\n" a
Character: a
[email protected]:~$ printf "Character: %c\n" a b c
Character: a
Character: b
Character: c
[email protected]:~$ printf "Character: %c\n" abc
Character: a

Utilisation de modificateurs pour afficher la sortie printf dans un style spécifique

Il existe des modificateurs pour modifier l'apparence de la sortie selon votre goût.

# modificateur pour les nombres octaux et hexadécimaux

Plus tôt, vous avez vu l'utilisation de %o pour convertir décimal en octal. Cependant, il n'était pas très clair qu'il s'agissait d'un nombre octal. Vous pouvez utiliser le # modificateur pour afficher les nombres octaux et hexadécimaux au format approprié.

[email protected]:~$ printf "%d is %#o in octal and %#x in hexadecimal\n" 30 30 30
30 is 036 in octal and 0x1e in hexadecimal

Modificateur d'espace pour les entiers positifs

Vous pouvez utiliser un espace entre % et d dans %d pour afficher un entier positif précédé d'un espace. Cela aide lorsque vous avez une colonne de nombres positifs et négatifs. Voyez laquelle est la plus "jolie" :

[email protected]:~$ printf "%d \n%d \n%d \n" 10 -10 10
10 
-10 
10 
[email protected]:~$ printf "% d \n%d \n% d \n" 10 -10 10
 10 
-10 
 10 

Modificateur de largeur

Le modificateur de largeur est un entier qui spécifie la largeur de champ minimale de l'argument.

Par défaut, il est aligné à droite :

[email protected]:~$ printf "%10s| %5d\n" Age 23
       Age|    23

Vous pouvez l'aligner à gauche en ajoutant - indicateur :

[email protected]:~$ printf "%-10s| %-5d\n" Age 23
Age       | 23

Modificateur de précision

Vous pouvez utiliser le modificateur de précision (.) point pour spécifier un nombre minimum de chiffres à afficher avec %d , %u , %o , %x . Il ajoute un remplissage zéro à gauche de la valeur.

[email protected]:~$ printf "Roll Number: %.5d\n" 23
Roll Number: 00023

Si vous utilisez le modificateur de précision avec une chaîne, il spécifie la longueur maximale de la chaîne. Si la chaîne est plus longue, elle est tronquée à l'affichage.

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi

Vous pouvez combiner les modificateurs de largeur et de précision :

[email protected]:~$ printf "Name: %.4s\n" Abhishek
Name: Abhi
[email protected]:~$ printf "Name: %10.4s\n" Abhishek
Name:       Abhi

Exemple bonus :afficher la sortie au format tabulaire avec printf

Mettons à profit ce que vous avez appris sur la commande printf avec un exemple légèrement plus compliqué. Cela montrera le véritable potentiel de la commande printf dans les scripts bash.

Utilisons la commande printf pour imprimer le tableau suivant à l'aide de bash :

Nom identifiant Âge Notes
Sherlock Holmes 0000122 23 A
James Bond 0000007 27 F
Hercule Poirot 0006811 59 G
Jane Marple 1234567 71 C

Voici le script shell que j'ai écrit pour cette tâche. Votre script peut varier :

#/bin/bash
seperator=--------------------
seperator=$seperator$seperator
rows="%-15s| %.7d| %3d| %c\n"
TableWidth=37

printf "%-15s| %-7s| %.3s| %s\n" Name ID Age Grades
printf "%.${TableWidth}s\n" "$seperator"
printf "$rows" "Sherlock Holmes" 122 23 A
printf "$rows" "James Bond" 7 27 F
printf "$rows" "Hercules Poirot" 6811 59 G
printf "$rows" "Jane Marple" 1234567 71 C

Maintenant, si j'exécute ce script shell bash, voici ce qu'il affiche :

N'est-il pas merveilleux d'utiliser la commande bash printf pour imprimer une sortie magnifiquement formatée pour vos scripts ?

J'espère que vous avez aimé ce tutoriel détaillé sur la commande printf sous Linux. Si vous avez des questions ou des suggestions, n'hésitez pas à me le faire savoir. Et n'oubliez pas de devenir membre de Linux Handbook pour plus d'informations sur Linux.


Linux
  1. Utilisation de Bash pour l'automatisation

  2. Bash + Utiliser Printf pour imprimer dans un format spécial ?

  3. Utilisation de la commande Linux Sleep dans les scripts Bash

  4. Utilisation de la commande Linux Basename dans les scripts Bash

  5. Exemples d'utilisation de la commande tcpdump pour le dépannage du réseau

Conseils pour utiliser la commande top sous Linux

Astuces Bash pour tous les jours en ligne de commande

Commande Bash printf

Bash Scripting - Commande Printf expliquée avec des exemples

Utilisation de la commande Linux Dirname dans les scripts Bash

utiliser random pour générer une chaîne aléatoire dans bash