Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4

Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4

Wenn wir unsere Serie zu nützlichen Bash -Befehlszeilen -Tipps und -tricks fortsetzen, werden wir in dem heutigen Artikel nur das Erforschen von Grepping, was Sie brauchen, und mit einem Grundprogramm beginnen PWD und wie man den Pfad entdeckt, aus dem ein Skript gestartet wurde.

In diesem Tutorial lernen Sie:

  • Nützliche Bash -Befehlszeilen -Tipps, Tricks und Methoden
  • So interagieren Sie mit der Bash -Befehlszeile fortschrittlich
  • So schärfen Sie Ihre Bash -Fähigkeiten insgesamt und werden zu einem kompetenteren Bash -Benutzer
Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Linux-Verteilungsunabhängige
Software BASH -Befehlszeile, Linux -basiertes System
Andere Jedes Dienstprogramm, das standardmäßig nicht in der Bash -Shell enthalten ist sudo apt-Get Installieren Sie den Dienstprogramm (oder yum install Für Redhat -basierte Systeme)
Konventionen # - Erfordert, dass Linux -Commands mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mithilfe von verwendet werden sudo Befehl
$-erfordert, dass Linux-Commands als regulärer nicht privilegierter Benutzer ausgeführt werden

Beispiel 1: Pfad Arbeitsverzeichnis? Oder nicht?

Wir können es gewohnt sein, anzurufen PWD In der Befehlszeile, um uns den Namen unseres aktuellen Verzeichnisses mitzuteilen:

$ PWD/Home/Roel/Arbeitsbereich 

Wenn wir jedoch das Verzeichnis erhalten möchten, aus dem ein Skript gestartet wurde, funktioniert diese Variable aus einem Skript auch auf die gleiche Weise?

$ cat test_pwd.Sch #!/bin/bash my_path1 = "$ pwd" echo "$ my_path1" my_path2 = "$ (pwd)" echo "$ my_path2" 
Kopieren

Wir werden zwei Möglichkeiten nutzen, um den Pfad abzurufen: Wir schauen (zum ersten Mal My_path1 Zuordnung) am PWD (Betriebssystempegel) automatisch Preset-Variable und im zweiten Fall (für die zweite My_path2 Zuweisung) Wir führen aus PWD in einer Unterschale ($ (…)) und zuweisen es zu My_path2. Lassen Sie uns dasselbe ausführen:

$ ./test_pwd.SH/Home/Roel/Arbeitsbereich/Home/Roel/Arbeitsbereich 

Sieht alles gut aus, richtig? Ja, vielleicht, aber sobald wir uns in ein anderes Verzeichnis verwandeln und das Skript mit dem vollständigen oder relativen Pfadnamen anrufen, die PWD Variable (oder die PWD Befehl) Innerhalb des Skripts gibt das Verzeichnis zurück, in dem wir uns befanden, als das Skript gestartet wurde. Überprüfen wir dies:

$ mkdir test $ cd test $… /test_pwd.SH/HOME/ROEL/WORKSPACE/Test/Home/Roel/Arbeitsbereich/Test 

Was wir hier sehen können, ist das PWD (oder der $ Pwd Variable) gibt immer den tatsächlichen aktuellen Pfad zurück.

Dies kann ein Problem sein: Möglicherweise möchten wir ein Index oder auf eine Datei aus demselben Verzeichnis (oder einem Unterverzeichnis davon) wie das, in dem sich das Skript befand. Dies ist häufig bei komplexeren Bash -Skripten der Fall, die mehrere Indexs und/oder Daten- und Konfigurationsdateien aufrufen.

Was ist also ein einheitlicher Weg, um das zu erhalten? Pfad, von dem das Skript gestartet wurde?

Man kann in Betracht ziehen, die zu verwenden Dirname "\ $ 0" Befehl:

$ cat test2.Sch #!/bin/bash echo "\ $ 0" Dirname "\ $ 0" 
Kopieren

DirName ergibt den Namen der - Relativ - Verzeichnisnamen jeder Option, die an sie übergeben wurde, und in diesem Fall das heißt \ $ 0 - Eine spezielle Variable, die festgelegt wird, wenn ein Skript mit dem Namen des Skripts beginnt, wie es gestartet wurde. Testen wir es:

$ ./test2.Sch ./test2.Sch . $ cd test $… /test2.Sh… /test2.Sch… 

Besser, nehme ich an, und es kann ein wenig helfen (hauptsächlich eine Idee zu bekommen), aber es bringt uns immer noch nicht mit einem voll qualifizierten Pfadname,. Dafür können wir eine Doppel -Subschalen -Wrapper verwenden Dirname in Kombination mit einem von a erhaltenen voll qualifizierten Pfad PWD Ausführung:

$ cat make_it_work.Sch #!/bin/bash my_path = "$ (CD" $ (DirName "\ $ 0") "&& pwd)" echo "$ my_path" 
Kopieren

Mal sehen, ob es funktioniert:

$ ./Bring es zum Laufen.SH/Home/Roel/Arbeitsbereich 

So weit so gut, aber funktioniert es, wenn Sie es aus einem Unterverzeichnis ausführen?

$ CD -Test && PWD/Home/Roel/Arbeitsbereich/Test $…/make_it_work.SH/Home/Roel/Arbeitsbereich $/Home/Roel/Arbeitsbereich/make_it_work.SH/Home/Roel/Arbeitsbereich 

Ja!

Wir wechseln zuerst in prüfen und überprüfen wir, dass wir in der sind prüfen Verzeichnis, wenn dieses Verzeichnis ändert (CD) Das Kommando war erfolgreich (wie angewiesen von von &&).

In beiden Fällen - ob es relativ aufgerufen wird (… /) oder mit einem voll qualifizierten Pfadname (/Home/Roel/Arbeitsbereich/), das Ergebnis ist, dass wir das Verzeichnis sehen, aus dem das Skript gestartet wurde (/Home/Roel/Arbeitsbereich/) und nicht das tatsächliche aktuelle Arbeitsverzeichnis oder PWD (/Home/Roel/Arbeitsbereich/Test).

Zusammenfassend können Sie die verwenden My_path = "$ (CD" $ (DirName "\ $ 0") "&& pwd)" Ein-Liner-Skript, um den richtigen, vollständig qualifizierten Verzeichnisnamen in Ihren Skripten zu erhalten. Danach funktioniert die Verwendung einer relativen Ergänzung gut. Zum Beispiel können Sie verwenden $ My_path/include/mysubscript.Sch und selbst $ My_path /… /one_dir_up_file.txt usw.

Beispiel 2: nur das, was Sie brauchen, was Sie brauchen

Haben Sie jemals benutzt Grep? Grep ist ein vielseitiges Bash -Befehlszeilendienstprogramm, mit dem Sie den Text aus einer Datei problemlos auswählen können. Meistens wird es wie folgt verwendet:

$ cat Test Line 1 Meine Zeile Zeile 2 Ihre Linien Zeile 3 Unsere Linie $ Grep 'Zeile 2' Testzeile 2 Ihre Linien 


Wir haben eine Eingabedatei mit 3 Zeilen und suchen nach einem bestimmten Test (Zeile 2) in dieser Datei. Aber wie wäre es, wenn Sie nur die Zeilen wollen, die das Vielfache haben Linie (ich.e. Linien) in ihnen erwähnt? Und wie wäre es, wenn Sie nur das Wort vor es haben wollten, einschließlich der Linien Bit, aber nicht das tatsächliche Zeile x Ausgang?

In diesem Fall können wir nur für das ausgehen, was wir mit dem brauchen ('nur') Option zu Grep:

$ grep -o 'Linien' Testlinien $ grep -o '\ W \+ Linien' Testen Sie Ihre Zeilen 

Bingo! Wir haben zuerst nur das Wort "Zeilen" gegründet, das gefunden wurde. Wir haben das dann mit einem Raum und einem regulären Ausdruck vorangestellt, der in Pseudo-Text heißt: Finden Sie eine Wortgrenze (\ w), mindestens ein und so oft wie zutreffend (zutreffend (\+) gefolgt von einem Raum. Das Ergebnis ist das dein (Das hat zwei Wortgrenzen; ein Start und ein Ende) ist enthalten. Zeile 2 ist nicht enthalten. Während es Wortgrenzen hat, gibt es kein Suffix von Linien zu diesem.

Wenn Sie mehr über regelmäßige Ausdrücke in Bash erfahren möchten, sehen Sie sich Bash Regexps für Anfänger an.

Abschluss

In diesem Artikel haben wir untersucht PWD und sah mir an, wie man benutzt PWD von innerhalb eines Skripts in Kombination mit Dirname Um den voll qualifizierten Verzeichnispfad abzurufen, aus dem das Skript gestartet wurde, so wird es immer funktionieren. Wir haben uns auch nur das angesehen, was wir mit dem brauchen Option und in diesem Fall ein regulärer Ausdruck, der die Wortgrenzen übereinstimmt.

Hinterlassen Sie uns einen Kommentar mit Ihren besten Tipps und Tricks für Bash -Befehlszeilen!

  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 2
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 3
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 5

Verwandte Linux -Tutorials:

  • Eine Einführung in Linux -Automatisierung, Tools und Techniken
  • Mastering -Bash -Skriptschleifen beherrschen
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 1
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 3
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 2
  • Dinge zu installieren auf Ubuntu 20.04
  • Verschachtelte Schleifen in Bash -Skripten
  • Ubuntu 20.04 Tricks und Dinge, die Sie vielleicht nicht wissen
  • Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 5
  • Ubuntu 20.04 Leitfaden