Recherche de site Web

Exemples utiles de trucs et astuces en ligne de commande Bash - Partie 3


Bash est une interface shell variée avec de nombreuses options de programmation et un langage d’instruction riche. Il est facile de manquer les fonctionnalités et la dynamique de Bash, c’est pourquoi cette série présente un certain nombre de conseils, d’astuces, d’exemples et de pièges lorsqu’il s’agit d’utiliser Bash. Pour les deux premiers articles de cette série, veuillez consulter notre article Astuces et astuces de ligne de commande Useful Bash parties 2 et Astuces de lignes de commande Useful Bash parties 3.

Dans cette série de tutoriels, vous apprendrez :

  • Conseils, astuces et méthodes utiles de la ligne de commande Bash
  • Comment interagir avec la ligne de commande Bash de manière avancée
  • Comment affiner vos compétences globales en Bash et devenir un utilisateur plus compétent de Bash

Exemples utiles de trucs et astuces de ligne de commande Bash - Partie 3

Configuration logicielle requise et conventions utilisées

Exemple 1 : Vérifier correctement l’existence de fichiers et de répertoires

Nous pouvons vérifier la présence d’un répertoire assez facilement en utilisant la clause -d (does a directory with the specified name exist) dans une instruction if :

MYPATHTOCHECKFOREXISTENCE="${PWD}"
echo "${MYPATHTOCHECKFOREXISTENCE}"
/home/roel/iamhappy
if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi
Exists!

Cependant, il est tout aussi facile de faire une erreur difficile à déboguer dans certains domaines de Bash. Par exemple, considérons (et voyons si vous pouvez trouver le bogue) ;

MYPATHTOCHECKFOREXISTANCE="/doesnotreallyexist"
if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi
Exists!
ls /doesnotreallyexist
ls: cannot access '/doesnotreallyexist': No such file or directory

Pourquoi la vérification if arrive-t-elle à la conclusion que le répertoire /doesnotreallyexist existe bel et bien ? Pouvez-vous voir le bug ?

Le problème ici est qu’il y a une faute de frappe dans le nom de la variable. EXISTENCE vs EXISTENCE...

Peut-être un peu effronté, mais sérieusement, cela devrait aussi être un piège facile à rencontrer :

if [ -d ]; then echo "Exists!"; fi
Exists!

Et plus important encore ;

VAR1=''; if [ -d ${VAR1} ]; then echo "Exists!"; fi
Exists!

Ainsi, si vous avez oublié d’initialiser la variable de nom de répertoire que vous vérifiez par la suite, ou si le nom de la variable est mal orthographié, alors le résultat sera que l’instruction Bash if renvoie que le répertoire existe ! Il n’y a pas d’autre mention de cette exception intéressante dans le manuel (ref man Bash) qui précise seulement que -d est True si le fichier existe et est un répertoire.

Alors, comment pouvons-nous résoudre ce problème ?

Exemple 2 : Une meilleure façon de vérifier l’existence de fichiers et de répertoires

La solution est facile ; Nous pouvons mettre notre variable entre guillemets doubles ("), ce qui fera que le résultat par défaut de if not est toujours vrai. En guise de note intéressante pour une réflexion plus approfondie, et peut-être votre commentaire bien informé ci-dessous dans le même sens, on doit se demander pourquoi il a été mis en œuvre comme ça et quelle est l’implémentation sous-jacente toujours vraie.

VAR1=''; if [ -d "${VAR1}" ]; then echo "Exists!"; fi
$

Une solution simple et élégante. Au lieu que l’instruction if soit maintenant analysée comme si [ -d ] qui, comme nous l’avons vu, est toujours évaluée comme vraie, elle est maintenant analysée comme (à condition que VAR1 soit vide au moins) si [ -d «  » ] ce qui donne false, et donc la clause then n’est pas exécutée.

Exemple 3 : Vous avez toujours voulu extraire le contenu d’un fichier .deb ?

Parfois, quelque chose ne fonctionne pas sur un système et nous pouvons vouloir obtenir un seul fichier à partir d’un paquet .deb. .deb paquets (paquets d’installation de style Debian, également utilisés par Ubuntu et Mint) peuvent être facilement trouvés en ligne, mais il n’est pas toujours évident de savoir comment en extraire des fichiers. Pour ce faire, nous pouvons :

ar x some_deb_file.deb
tar -xf data.tar.xz

La RA est un outil permettant de créer, de modifier et d’extraire des archives, comme l’explique le manuel (MAN AR). Ces commandes produiront les fichiers à l’intérieur du paquet .deb. Chaque fichier .deb aura deux fichiers d’archive, à savoir control.tar.xz et data.tar.xz (une norme courante), et - comme vous pouvez le voir sur l’exemple - c’est l’archive data.tar.xz qui doit être développée pour voir les fichiers à l’intérieur du paquet .deb.

Conclusion

Dans cet article, nous avons exploré les moyens de vérifier correctement l’existence de fichiers et de répertoires en utilisant des guillemets appropriés, et nous avons illustré comment il est facile de faire des erreurs dans ce domaine. Testez toujours vos scripts et essayez une variété de situations et de scénarios différents. Nous avons également examiné comment nous pouvons extraire le contenu d’un fichier .deb à l’aide des commandes ar et tar. Comme toujours, profitez du codage Bash et laissez-nous un commentaire ci-dessous avec vos trouvailles !

  • Exemples utiles de trucs et astuces de ligne de commande Bash - Partie 1
  • Exemples utiles de trucs et astuces de ligne de commande Bash - Partie 2
  • Exemples utiles de trucs et astuces de ligne de commande Bash - Partie 3
  • Exemples utiles de trucs et astuces de ligne de commande Bash - Partie 4
  • Exemples utiles de trucs et astuces en ligne de commande Bash - Partie 5

Articles connexes: