Recherche de site Web

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


Dans cette série, nous explorons divers conseils, astuces et exemples de ligne de commande Bash qui vous aideront à devenir un utilisateur et un codeur Bash plus avancé. Bash fournit un langage de script et de codage riche qui remet le pouvoir entre les mains de l’utilisateur et du développeur. Bash vous permet également d’apprendre au fur et à mesure, ce qui en fait une expérience plus agréable. Pour le premier article de notre série, veuillez consulter notre article Trucs et astuces utiles en ligne de commande Bash exemples partie 1.

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 2

Configuration logicielle requise et conventions utilisées

Exemple 1 : Attraper cette adresse IP illusoire

Parfois, nos scripts ont besoin de savoir de quelle adresse IP se trouve notre machine. Il existe plusieurs méthodes différentes, mais aucune d’entre elles n’est totalement infaillible. Par exemple, le fait d’avoir plusieurs cartes réseau dans un ordinateur peut créer des modifications dans la sortie par diverses commandes. De plus, certaines commandes ont des limitations.

Par exemple, la commande hostname indique clairement dans son manuel (pour l’option -I) qu’elle affichera toutes les adresses réseau de l’hôte, mais qu’il ne faut pas faire de suppositions sur l’ordre de la sortie. Il semble donc que l’utilisation du nom d’hôte ne soit pas la meilleure option.

Les exemples fournis ici ont pour but de vous donner du pouvoir et de vous fournir des suggestions pour une exploration plus poussée et une amélioration spécifique à l’environnement et/ou générale. La connaissance de la machine interrogée ou du réseau utilisé permettra de transformer ces commandes en scripts de récupération d’adresses IP plus stables.

MYIP="$(ip a | grep 'inet.*global' | grep -v docker | sed 's|.*inet ||' | grep -o "^[\.0-9]\+")"; echo "${MYIP}"
10.10.0.20
MYIP="$(ip -s route get 1 | grep -o "src [\.0-9]\+" | grep -o "[\.0-9]\+")"; echo "${MYIP}"
10.10.0.20

Dans la première commande, nous avons utilisé la commande ip a (adresse IP) pour récupérer une liste de toutes les adresses IP attribuées à cette machine. Vous pouvez taper la commande ip a directement sur la ligne de commande Bash pour voir à quoi ressemble la sortie.

Nous avons ensuite récupéré tous les adaptateurs inet globaux, et supprimé toutes les connexions réseau docker de la liste (vous pouvez voir que ce n’est pas parfait ; d’autres logiciels peuvent créer d’autres interfaces réseau, par exemple ssh ou d’autres programmes de virtualisation comme virtualbox, qui nécessiteraient également un filtrage).

Nous traitons ensuite l’entrée avec sed pour supprimer les informations jusqu’à inet. Enfin, nous grep pour l’IP réelle avec un grep uniquement, c’est-à-dire la commande grep -o qui utilise une expression régulière pour récupérer l’adresse IP complète (IPv4).

Pour en savoir plus sur les expressions régulières, consultez nos articles sur les expressions rationnelles Bash pour les débutants avec des exemples et les articles sur les expressions régulières Bash avancées avec des exemples.

Vous pouvez également remarquer à nouveau à quel point il y a des limites ici ; comment incorporer des adresses IP IPv6, comment savoir quelle est l’adresse IP principale lorsqu’il y a plusieurs adaptateurs, etc.

Dans la deuxième commande, nous recherchons la première route sur la machine avec ip -s route get 1, puis nous traitons la sortie de la même manière. C’est potentiellement plus stable pour au moins trouver l’adresse IPv4 principale de la machine.

Faites-nous savoir votre meilleure méthode pour obtenir l’adresse IP, et peut-être l’adresse IPv4 principale en utilisant le script Bash dans les commentaires ci-dessous !

Exemple 2 : Les risques du globbing et la nécessité de coter correctement

touch a b c
echo "$(echo "*")"
*
echo $(echo "*")
a b c

Dans cet exemple, nous créons d’abord 3 fichiers, a, b et c, puis nous exécutons deux echos. Le premier écho met correctement entre guillemets le * résultant de l’écho « * » à l’intérieur de la sous-couche $(), ce qui entraîne l’émission d’un * littéral par le premier écho de la commande. La deuxième commande echo ne met pas correctement le * entre guillemets et en tant que tel, le globbing Bash a lieu ; Le * est considéré comme un identificateur de nom de fichier, et les fichiers sont répertoriés et transmis au premier écho. Pour clarifier cela, considérez :

echo *
a b c

Nous voyons donc un besoin de toujours citer correctement tout texte qui peut être interprété comme un nom de fichier, même si un tel texte est déjà correctement cité à l’intérieur du sous-shell, comme c’est le cas ici ($ (echo « * ») : notez le * entre guillemets).

Conclusion

Dans cet article, nous avons vu comment obtenir une adresse IP à l’aide de différentes méthodes et avons envisagé de l’étendre pour l’adapter à divers environnements. Nous avons également exploré le globbing Bash, et la nécessité de citer correctement les textes qui peuvent être interprétés correctement comme des noms de fichiers, afin d’éviter le globbing.

  • 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: