Exemples de lignes de commande de commande de bash utile - Partie 4

Exemples de lignes de commande de commande de bash utile - Partie 4

Poursuivant notre série sur les conseils et astuces de ligne de commande de bash utiles, dans l'article d'aujourd'hui, nous explorerons uniquement ce dont vous avez besoin, et commencer avec une introduction PWD et comment découvrir le chemin du script à partir de.

Dans ce tutoriel, 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 de bash dans l'ensemble et devenir un utilisateur de bash plus compétent
Exemples de lignes de commande de commande de bash utile - Partie 4

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Indépendant de la distribution Linux
Logiciel Ligne de commande bash, système basé sur Linux
Autre Toute utilité qui n'est pas incluse dans le shell bash par défaut peut être installée en utilisant Sudo Apt-Get Install Utility-Name (ou Installation de miam pour les systèmes basés sur Redhat)
Conventions # - nécessite que les commandes Linux soient exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - exige que les commandes Linux soient exécutées en tant qu'utilisateur régulier non privilégié

Exemple 1: répertoire de travail du chemin? Ou non?

Nous pouvons être habitués à appeler PWD sur la ligne de commande pour nous dire le nom de notre répertoire actuel:

$ pwd / home / roel / espace de travail 

Mais si nous voulons obtenir le répertoire à partir du démarrage d'un script, en utilisant cette variable à partir d'un script, fonctionne également de la même manière?

$ Cat test_pwd.sh #!/ bin / bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2" 
Copie

Nous utiliserons deux façons pour récupérer le chemin: nous regardons (pour le premier My_path1 affectation) au PWD (Niveau du système d'exploitation) Variable de présidence automatique et dans le deuxième cas (pour la seconde My_path2 affectation) nous exécutons PWD Dans une sous-coquille ($ (…)) et l'attribuer à My_path2. Exécutons la même chose:

$ ./ test_pwd.sh / home / roel / workpace / home / roel / workspace 

Ça a l'air bien, bien? Oui, peut-être, mais une fois que nous nous transformons en un autre répertoire et appelons le script en utilisant son nom de chemin complet ou relatif, le PWD variable (ou le PWD Commande) À l'intérieur du script renverra le répertoire dans lequel nous étions lorsque le script a été démarré. Vérinons ceci:

$ mkdir test $ cd test $… / test_pwd.sh / home / roel / workspace / test / home / roel / workspace / test 

Ce que nous pouvons voir ici, c'est que PWD (ou la $ Pwd variable) renvoie toujours le chemin actuel réel.

Cela peut être un problème: nous pouvons vouloir démarrer un indice, ou accéder à un fichier, à partir du même répertoire (ou un sous-répertoire) que celui où se trouvait le script. C'est souvent le cas pour des scripts bash plus complexes qui appellent plusieurs indices et / ou données et fichiers de configuration.

Alors, quelle est une façon uniforme d'obtenir le Chemin d'où le script a été démarré?

On peut envisager d'utiliser le dirname "\ 0 0" commande:

$ Cat test2.sh #!/ bin / bash echo "\ $ 0" dirname "\ $ 0" 
Copie

Dirname produira le nom du répertoire - relatif de toute option qui lui est adoptée, et dans ce cas qui est \ 0 0 - Une variable spéciale qui est définie lorsqu'un script commence au nom du script au début. Tessons-le:

$ ./ test2.shot ./ test2.shot . $ cd test $… / test2.sh… / test2.sh… 

Mieux, je suppose, et cela peut aider un peu (pour avoir une idée principalement), mais cela ne nous donne toujours pas avec un chemin d'accès pleinement qualifié. Pour cela, nous pouvons utiliser un emballage à double sous-coquille autour dirname en combinaison avec un chemin qualifié complet réel obtenu à partir d'un PWD exécution:

$ cat Make_it_work.sh #!/ bin / bash my_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" echo "$ my_path" 
Copie

Voyons si cela fonctionne:

$ ./fais-le fonctionner.sh / home / roel / espace de travail 

Jusqu'ici tout va bien, mais cela fonctionne lorsque vous l'exécutez à partir d'un sous-répertoire?

$ cd test && pwd / home / roel / workspace / test $… / make_it_work.sh / home / roel / workspace $ / home / roel / workspace / make_it_work.sh / home / roel / espace de travail 

Oui!

Nous changeons d'abord en test et vérifier que nous sommes dans le test répertoire, si ce répertoire change (CD) La commande a réussi (comme indiqué par &&).

Dans les deux cas - si elle est appelée de manière relative (… /), ou avec un nom de chemin entièrement qualifié (/ home / roel / workspace /), le résultat est que nous voyons le répertoire à partir duquel le script a été démarré (/ home / roel / workspace /) et non le répertoire de travail actuel réel, ou Pwd (/ Home / Roel / Workspace / Test).

En résumé, vous pouvez utiliser le My_path = "$ (cd" $ (dirname "\ $ 0") "&& pwd)" script à une ligne pour obtenir le nom de répertoire correct et entièrement qualifié à partir de vos scripts. Après cela, l'utilisation d'un ajout relatif fonctionnera bien. Par exemple, vous pouvez utiliser $ My_path / include / mysubscript.shot et même $ My_path /… / one_dir_up_file.SMS etc.

Exemple 2: Grepping uniquement ce dont vous avez besoin

Avez-vous déjà utilisé grep? Grep est un utilitaire de ligne de commande bash polyvalent qui vous permet de sélectionner facilement du texte à partir d'un fichier. La plupart du temps, il est utilisé comme suit:

$ Cat Test Line 1 Ma ligne Ligne 2 Vos lignes Ligne 3 Notre ligne $ grep 'ligne 2' Test Line 2 Vos lignes 


Nous avons un fichier d'entrée avec 3 lignes et nous recherchons un test spécifique (ligne 2) dans ce fichier. Mais que diriez-vous si vous ne voulez que les lignes qui ont le multiple doubler (je.e. lignes) mentionné en eux? Et, que diriez-vous si vous vouliez seulement avoir le mot avant qu'il y compris le lignes peu, mais pas le réel ligne X sortir?

Dans ce cas, nous ne pouvons que grep uniquement pour ce dont nous avons besoin -o («seulement») Option pour grep:

$ grep -o 'lignes' Test Lines $ grep -o '\ w \ + lignes' tester vos lignes 

Bingo! Nous avons d'abord salué uniquement le mot «lignes», qui a été trouvé. Nous avons ensuite préfixé cela avec un espace et une expression régulière qui indique en pseudo-texte: trouvez une limite de mot (\ w), au moins une fois et autant de fois que l'applicable (\+) suivi d'un espace. Le résultat est que ton (qui a deux limites de mots; un début et une fin) est inclus. ligne 2 n'est pas inclu. Bien qu'il ait des limites de mot, il n'y a pas de suffixe de lignes à celui-là.

Si vous souhaitez en savoir plus sur les expressions régulières dans Bash, veuillez consulter les armes à l'exploit.

Conclusion

Dans cet article, nous avons exploré PWD et a regardé comment utiliser PWD de l'intérieur d'un script en combinaison avec dirname Pour récupérer le chemin du répertoire entièrement qualifié à partir duquel le script a été démarré, d'une manière qui fonctionnera toujours. Nous avons également examiné le grepper uniquement ce dont nous avons besoin en utilisant le -o option et, dans ce cas, l'expression régulière pour correspondre aux limites des mots.

Laissez-nous un commentaire avec vos meilleurs conseils et astuces de ligne de commande bash!

  • Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
  • Exemples de lignes de commande de commande de bash utile - Partie 4
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 5

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Conseils de ligne de commande bash utiles et exemples de trucs - Partie 1
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 3
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 2
  • Choses à installer sur Ubuntu 20.04
  • Boucles imbriquées dans les scripts bash
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Conseils de commande de commande de bash utile et exemples de trucs - Partie 5
  • Ubuntu 20.04 Guide