Nützliche Bash-Befehlszeilen-Tipps und -Tricks, Beispiele - Teil 3
Bash ist eine abwechslungsreiche Shell-Schnittstelle mit vielen Programmieroptionen und einer reichhaltigen Unterrichtssprache. Es ist leicht, die Funktionen und die Dynamik von Bash zu übersehen, daher stellt diese Serie eine Reihe von Tipps, Tricks, Beispielen und Fallstricken vor, wenn es um die Verwendung von Bash geht. Die ersten beiden Artikel dieser Serie finden Sie in unserem Artikel Nützliche Bash-Befehlszeilentipps und -tricks Beispiele Teil 2 und Nützliche Bash-Befehlszeilentipps und -tricks Beispiele Teil 3.
In dieser Tutorial-Reihe lernen Sie:
- Nützliche Tipps, Tricks und Methoden zur Bash-Befehlszeile
- So interagieren Sie mit der Bash-Befehlszeile auf fortgeschrittene Weise
- Wie du deine Bash-Fähigkeiten insgesamt schärfst und ein kompetenterer Bash-Benutzer wirst
Nützliche Bash-Befehlszeilen-Tipps und -Tricks Beispiele – Teil 3
Verwendete Softwareanforderungen und Konventionen
Beispiel 1: Korrekte Überprüfung des Vorhandenseins von Dateien und Verzeichnissen
Wir können das Vorhandensein eines Verzeichnisses ziemlich einfach überprüfen, indem wir die Klausel -d (existiert ein Verzeichnis mit dem angegebenen Namen) in einer if-Anweisung verwenden:
MYPATHTOCHECKFOREXISTENCE="${PWD}"
echo "${MYPATHTOCHECKFOREXISTENCE}"
/home/roel/iamhappy
if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi
Exists!
Es ist jedoch ebenso einfach, in einigen Bereichen von Bash einen schwer zu debuggenden Fehler zu machen. Lassen Sie uns zum Beispiel überlegen (und sehen, ob Sie den Fehler finden können);
MYPATHTOCHECKFOREXISTANCE="/doesnotreallyexist"
if [ -d ${MYPATHTOCHECKFOREXISTENCE} ]; then echo "Exists!"; fi
Exists!
ls /doesnotreallyexist
ls: cannot access '/doesnotreallyexist': No such file or directory
Warum kommt die if-Prüfung zu dem Schluss, dass das Verzeichnis /doesnotreallyexist tatsächlich existiert? Können Sie den Fehler sehen?
Das Problem hier ist, dass es einen Tippfehler im Variablennamen gibt. EXISTENZ vs. EXISTENZ...
Vielleicht ein bisschen frech, aber im Ernst sollte das auch ein leichtes Problem sein:
if [ -d ]; then echo "Exists!"; fi
Exists!
Und noch wichtiger;
VAR1=''; if [ -d ${VAR1} ]; then echo "Exists!"; fi
Exists!
Wenn Sie also vergessen haben, die Variable für die Initialisierung des Verzeichnisnamens zu initialisieren, die Sie anschließend überprüfen, oder wenn der Variablenname falsch geschrieben ist, dann ist das Ergebnis, dass die Bash if-Anweisung zurückgibt, dass das Verzeichnis existiert! Es gibt keine weitere Erwähnung dieser interessanten Ausnahme im Handbuch (ref man Bash), das nur klarstellt, dass -d True ist, wenn die Datei existiert und ein Verzeichnis ist.
Wie können wir das also beheben?
Beispiel 2: Eine bessere Möglichkeit, das Vorhandensein von Dateien und Verzeichnissen zu überprüfen
Die Lösung ist einfach; Wir können unsere Variable in doppelte Anführungszeichen (") setzen, wodurch das if not standardmäßig das Ergebnis immer wahr wird. Als interessante Randnotiz für weitere Überlegungen, und vielleicht Ihr sachkundiger Kommentar unten in gleicher Richtung, muss man sich fragen, warum es so implementiert wurde und was die zugrundeliegende immer-wahre Implementierung ist.
VAR1=''; if [ -d "${VAR1}" ]; then echo "Exists!"; fi
$
Eine einfache und elegante Lösung. Anstatt dass die if-Anweisung jetzt wie if [ -d ] geparst wird, was, wie wir gesehen haben, immer als wahr ausgewertet wird, wird sie jetzt als (vorausgesetzt, dass VAR1 mindestens leer ist) wenn [ -d "" ] geparst, was zu false führt, und somit wird die then-Klausel nicht ausgeführt.
Beispiel 3: Wollten Sie schon immer den Inhalt einer .deb Datei extrahieren?
Manchmal geht etwas auf einem System kaputt, und wir möchten vielleicht eine einzelne Datei aus einem .deb Paket abrufen. .deb Pakete (Installationspakete im Debian-Stil, wie sie auch von Ubuntu und Mint verwendet werden) können leicht online gefunden werden, aber es ist nicht immer so selbstverständlich, wie man Dateien daraus extrahiert. Zu diesem Zweck können wir:
ar x some_deb_file.deb
tar -xf data.tar.xz
AR ist ein Werkzeug zum Erstellen, Ändern und Extrahieren von Archiven, wie das Handbuch (man AR) erklärt. Diese Befehle geben die Dateien im .deb Paket zurück. Jede .deb Datei hat zwei Archivdateien, nämlich control.tar.xz und data.tar.xz (ein gängiger Standard), und – wie Sie am Beispiel sehen können – ist es das data.tar.xz-Archiv, das erweitert werden muss, um die Dateien im .deb Paket zu sehen.
Schlussfolgerung
In diesem Artikel haben wir untersucht, wie man das Vorhandensein von Dateien und Verzeichnissen durch die richtige Anführungszeichen korrekt überprüfen kann, und wir haben beispielhaft gezeigt, wie leicht es ist, in diesem Bereich Fehler zu machen. Testen Sie Ihre Skripte immer und probieren Sie eine Vielzahl verschiedener Situationen und Szenarien aus. Wir haben uns auch angesehen, wie wir Inhalte aus einer .deb Datei mit den Befehlen ar und tar extrahieren können. Wie immer, viel Spaß beim Bash-Programmieren und hinterlassen Sie uns unten einen Kommentar mit Ihren Ergebnissen!
- Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 1
- Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 2
- Nützliche Bash-Befehlszeilen-Tipps und -Tricks Beispiele – Teil 3
- Nützliche Bash-Befehlszeilen-Tipps und Tricks, Beispiele – Teil 4
- Nützliche Beispiele für Bash-Befehlszeilentipps und -tricks – Teil 5
