En tant que débutant lorsque vous commencez à travailler avec des scripts Bash, la première commande que vous apprendrez et utiliserez probablement est le echo
commande. Vous pouvez penser à la commande bash echo quelque chose de similaire à print
commande dans d'autres langages de programmation. L'echo
La commande est un bash intégré et son but est d'imprimer la sortie sur stdout (c'est-à-dire Terminal).
Dans cet article, je vais vous montrer ce qu'est la commande bash echo et comment l'utiliser dans vos scripts shell. Avant d'entrer dans le sujet, voyons la différence entre une commande Bash intégrée et une commande externe.
Écho intégré de Bash vs commande d'écho externe
Sous Linux et d'autres systèmes de type Unix, certaines commandes sont fournies à la fois comme commandes intégrées et externes. Par exemple, le /bin/echo
est une commande externe qui a le même nom que le echo
bash intégré.
Lorsque nous appelons une commande qui existe à la fois en tant que commande intégrée et en tant que commande externe, la commande intégrée est généralement exécutée par défaut. Parce que l'ordre de priorité des noms de commande est alias
, puis function
, puis builtin
, puis commande externe dans les répertoires répertoriés dans $PATH
en ordre.
Si vous souhaitez forcer une commande externe disponible à la fois en tant que commande intégrée et externe, utilisez simplement son chemin complet.
Pour le dire clairement, la commande suivante appelle le bash intégré :
$ echo <some-text>
Et les appels suivants external echo
commande :
$ /bin/echo <some-text>
Pour savoir si une commande est une commande intégrée ou externe, nous pouvons utiliser type commande :
$ type echo echo is a shell builtin
Pour afficher tous les emplacements contenant l'exécutable spécifié, utilisez -a
drapeau :
$ type -a echo echo is a shell builtin echo is /usr/bin/echo
Pour plus de détails sur le type
utilisation de la commande, reportez-vous au lien suivant :
- Le didacticiel de commande de type avec des exemples pour les débutants
Tout au long de ce guide, nous discuterons de l'echo
intégré bash commande, pas la commande externe.
Afficher l'aide de la commande bash echo
Presque toutes les commandes Linux disponibles ont une page de manuel ou une section d'aide pour comprendre comment utiliser cette commande. Le manuel d'aide de echo
La commande est incluse dans la page de manuel de Bash
Pour accéder à la page de manuel de bash
commande, exécutez :
$ man bash
Maintenant, tapez /echo
et appuyez sur n
jusqu'à ce que vous voyiez la section d'aide de echo
commande.
Vous pouvez également utiliser la commande à une ligne suivante pour afficher la section d'aide de echo
commande :
$ man bash | less --pattern='^ *echo +\['
Structure de la commande echo
L'echo
La commande accepte trois arguments optionnels et le texte à imprimer sur stdout.
echo [-neE] [arg ...] -n → Do not append a new line -e → enable interpretation of backslash escapes -E → disable the interpretation of backslash escapes (default)
Ignorons les trois arguments optionnels pour l'instant et voyons comment utiliser echo
pour imprimer un texte sur la sortie standard (Terminal).
Vous pouvez soit exécuter le morceau de code suivant directement dans le terminal, soit créer un fichier de script, puis l'exécuter. Je vais le lancer directement dans le Terminal :
$ echo "Hello World" Hello World
Jetez un oeil à l'exemple ci-dessus. C'est le traditionnel hello world
programme que nous exécutons chaque fois que nous apprenons un nouveau langage et l'exécutons comme premier code. L'echo
la commande ici accepte "hello world"
text comme argument et l'affiche sur le terminal (Stdout).
Comment supprimer le caractère de nouvelle ligne
Le comportement par défaut du bash echo
commande est, elle ajoutera automatiquement une nouvelle ligne (\n
). Exécutez le même hello world
programmez à nouveau et notez que l'invite du terminal s'affichera dans une nouvelle ligne.
$ echo "Hello world" Hello world
Maintenant, si vous souhaitez supprimer ce comportement, vous pouvez utiliser le "-n"
drapeau qui supprimera la nouvelle ligne et l'invite du terminal sera imprimée sur la même ligne, comme indiqué ci-dessous.
$ echo -n "Hello world" Hello world
Que se passe-t-il lorsqu'aucun argument n'est passé ?
Lorsqu'aucun argument n'est passé à la commande echo, la commande n'échouera pas mais renverra une nouvelle ligne vide. Lancez votre terminal et exécutez "echo"
et vous verrez qu'il imprime simplement une ligne vide et se termine.
$ echo
$ echo $?
0
Vous pouvez remplacer ce comportement en ajoutant le "-n"
drapeau qui n'imprimera pas de saut de ligne même si aucun argument n'est passé.
$ echo -n
Où cela sera-t-il utile ? Vous pourriez vous demander. Lorsque vous voulez des lignes vides entre vos sorties, vous pouvez utiliser echo
sans arguments.
Travailler avec des variables et des commandes
L'echo
La commande interprétera les variables définies par l'utilisateur ou shell qui sont passées en argument et affichera la valeur. Jetez un œil aux exemples ci-dessous.
Tout d'abord, la variable d'environnement "SHELL"
est passé à echo
commande et il imprime la valeur de la variable.
# Environmental Variable: $ echo " I am currently using ${SHELL}" I am currently using /bin/bash
Deuxièmement, la variable définie par l'utilisateur "NAME"
est passé à echo
commande et la valeur est imprimée sur le terminal.
# User Defined Variable: $ NAME="PoP_OS" $ echo "I am using ${NAME}" I am using PoP_OS
Vous pouvez également exécuter des commandes à l'intérieur des arguments. Jetez un oeil à l'exemple ci-dessous où le "uname -r"
commande est passée en argument et la commande est interprétée et la sortie est imprimée.
$ echo "KERNEL_VERSION=$(uname -r)" KERNEL_VERSION=5.11.0-7620-generic
Impact de l'utilisation de guillemets simples et doubles
Dans tous les exemples précédents, vous avez peut-être remarqué que j'ai utilisé des guillemets autour des arguments. Que se passe-t-il lorsque l'argument n'est pas entouré de guillemets ? La commande Echo n'échouera pas et vous obtiendrez le même résultat.
Jetez un oeil à l'exemple suivant. J'exécute la même commande que celle que j'ai utilisée dans la section précédente mais sans les guillemets et elle imprime la sortie sans aucune erreur.
$ echo I am using ${NAME} I am using Pop_OS
Comme bonne pratique, mettez toujours les arguments entre guillemets.
Si l'argument est le texte brut, vous pouvez utiliser des guillemets simples ou doubles. Mais si vous souhaitez exécuter une commande ou développer une variable dans l'argument, vous devez utiliser des guillemets doubles et non des guillemets simples.
Le guillemet simple empêchera toute commande d'être exécutée ou variable d'être développée. Il traitera simplement l'intégralité de l'argument comme du texte brut.
Regardez l'exemple ci-dessous. Lorsque je mets l'argument entre guillemets simples, la variable "NAME"
n'est pas interprété et traité comme du texte.
# SINGLE QUOTES $ echo 'I am using ${NAME}' I am using ${NAME} # DOUBLE QUOTES $ echo "I am using Linux ${NAME}" I am using Linux PoP_OS
Redirection et canalisation de sortie
Comme indiqué précédemment, le echo
La commande imprime la sortie sur la sortie standard (terminal) par défaut. Lorsque vous écrivez des scripts shell, vous pouvez vous retrouver dans une situation pour stocker la sortie du echo
commande dans un fichier. Vous pouvez le faire en utilisant la redirection bash opérateur.
$ echo "Welcome to OSTechNix" > /tmp/op.log
$ cat /tmp/op.log Welcome to OSTechNix
Suggestion de lecture :
- La redirection bash expliquée avec des exemples
- Tutoriel Bash Heredoc pour les débutants
Vous pouvez également envoyer la sortie du echo
commande au pipe
pour un traitement ultérieur.
$ echo "I am using ${NAME}" I am using PoP_OS
$ echo "I am using ${NAME}" | grep -i -o POP PoP
Chaîne multiligne
Votre argument peut parfois apparaître sur plus d'une ligne. Vous pouvez entourer l'argument multiligne de guillemets doubles pour imprimer la sortie en tenant compte des nouvelles lignes, tabulations et espaces.
$ echo "This is Line 1
This is Line 2
This is Line 3"
Dans certains cas, bien que votre argument soit transmis sous la forme d'une chaîne multiligne, vous souhaiterez peut-être l'imprimer sur une seule ligne. Dans ce cas, utilisez le "\"
symbole à la fin de chaque ligne, de sorte que la ligne suivante sera dans la continuité de la ligne précédente.
$ echo "I am running \ the echo command \ again"
Exemple de résultat :
I am running the echo command again
Ce n'est pas exclusivement spécifique au bash echo
commande. Vous pouvez utiliser cette approche pour générer des commandes très volumineuses sur plusieurs lignes pour une meilleure lisibilité.
La barre oblique inverse échappe à l'interprétation
L'echo
La commande accepte de nombreux caractères d'échappement comme arguments. Pour que ces caractères spéciaux soient reconnus par la commande echo, le "-e"
le drapeau doit être passé. Vous pouvez obtenir la liste des caractères spéciaux pris en charge à partir du echo
la page de manuel de la commande.
Vous n'utiliserez pas tous les caractères spéciaux dans votre vie de tous les jours. Vous utiliserez principalement des caractères de retour à la ligne, des tabulations et des caractères d'échappement antislash.
Caractère de nouvelle ligne - \n
Une nouvelle ligne sera ajoutée lorsque vous passerez \n
à l'echo
commande. Vous pouvez également passer plusieurs \n qui ajouteront plus de lignes en conséquence.
$ echo -e "This is the first line\nThis is the second Line\nThis is the third line"
Exemple de résultat :
This is the first line This is the second Line This is the third line
Onglet horizontal - \t
Quand \t
est utilisé, il ajoutera des espaces de tabulation. Vous pouvez également combiner plusieurs caractères d'échappement comme je l'ai fait ci-dessous.
$ echo -e "Enter the U_NAME\t:\n" Enter the U_NAME :
Onglet vertical - \v
Pour créer des onglets verticalement, utilisez \v
.
$ echo -e "Enter the username\vEnter the password" Enter the username Enter the password
Supprimer la sortie - \c
Quand \c
est utilisé, tout ce qui vient après \c
sera supprimé.
$ echo -e "I am using \cCosmic Desktop" I am using
Retour chariot - \r
Quand \r
est utilisé, le curseur est réinitialisé au premier caractère et à ce qui vient après \r
est imprimé en remplaçant les caractères existants.
$ echo -e "I use Arch, \rBtw" Btwse Arch,
Désactiver l'interprétation des échappements par antislash
Le comportement par défaut de echo
La commande est-elle traitera les caractères spéciaux comme du texte brut à moins que -e
le drapeau est passé. Le même comportement peut être obtenu en utilisant le -E
drapeau.
Je vais vous montrer un exemple.
Laissez-moi lancer echo
commande sans aucun drapeau :
$ echo "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
Ensuite, j'exécute la même commande avec -E
Drapeau :
$ echo -E "Welcome to OSTechNix \nblog" Welcome to OSTechNix \nblog
Comme vous pouvez le voir, le résultat est similaire lorsque j'ai exécuté le echo
commande avec -E
drapeau et sans aucun drapeau. Dans les deux cas, echo
la commande traite le /n
caractère spécial sous forme de chaîne simple.
Maintenant, laissez-moi exécuter à nouveau la même commande, mais cette fois avec -e
drapeau.
$ echo -e "Welcome to OSTechNix \nblog"
Welcome to OSTechNix
blog
Avez-vous repéré la différence ? La commande echo n'a pas traité /n
caractère sous forme de texte brut et il affiche tout ce qui vient après le /n
caractère spécial dans la nouvelle ligne.
Par conséquent, si vous souhaitez utiliser des caractères spéciaux tels que \n
, \t
, \v
etc., vous devez utiliser -e
drapeau. Sinon echo
traitera tout comme une chaîne simple.
Permettez-moi de vous montrer un autre exemple.
$ echo -e "Hello world\nHello World\nHello World" Hello world Hello World Hello World
Comme vous le voyez dans la sortie ci-dessus, echo
la commande affiche "Hello World"
chaîne trois fois, une par une (c'est-à-dire dans une nouvelle ligne).
Que faire si vous souhaitez échapper uniquement à un caractère spécial spécifique ? C'est là que double barre oblique inverse (\\
) vient à la rescousse.
Par exemple, je veux échapper au troisième /n
caractère spécial dans la commande précédente.
Pour ce faire, je vais préfixer le troisième caractère spécial avec une double barre oblique inverse (\\
) comme ci-dessous :
$ echo -e "Hello world\nHello World\\\nHello World" Hello world Hello World\nHello World
Maintenant, echo
la commande traite le troisième \n
caractère spécial sous forme de chaîne simple.
Par conséquent, lorsque vous avez beaucoup de caractères spéciaux et que vous souhaitez échapper uniquement un caractère spécial spécifique, vous devez ajouter la double barre oblique inverse (\\
) devant ce caractère spécial.
Conclusion
Dans cet article, nous avons vu ce que echo
commande est et différentes façons de l'utiliser. C'est une commande très simple et il n'y aura pas de script shell sans utiliser echo
sauf si vous décidez d'utiliser printf
qui est l'alternative pour echo
commande en bash.
Lire connexe :
- Scripts bash – Variables expliquées à l'aide d'exemples
- Scripts bash – Fonctions expliquées à l'aide d'exemples
- Scripts bash – Explication de la boucle For avec des exemples
- Scripts bash :boucle While et Until expliquée à l'aide d'exemples