Tipps und Trick -Beispiele für nützliche Bash -Bash -Befehlszeilen - Teil 4
- 2875
- 751
- Matteo Möllinger
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
Softwareanforderungen und Konventionen verwendet
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
- « 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 5 »