Creative Saplings

So überprüfen Sie ordnungsgemäß, ob eine Datei in Bash oder Shell vorhanden ist (mit Beispielen)

Februar 13, 2021
No Comments

Inhaltsverzeichnis

In diesem Tutorial werde ich verschiedene Attribute behandeln, die Sie in Bash- oder Shell-Skripten verwenden können, um Dateien und Verzeichnisse zu überprüfen. Sie können basale bedingte Ausdrücke mit ] verwenden oder test mit verwenden, um zu überprüfen, ob eine Datei vorhanden ist.

Wir werden Verwenden Sie den Operator bash if und else für alle Beispiele, daher würde ich Ihnen empfehlen, Folgendes zu lesen: Bash if else-Gebrauchsanweisung für absolute Anfänger

1. Bash / Shell: Überprüfen Sie, ob eine Datei vorhanden ist und eine reguläre Datei

In diesem Abschnitt werden Beispiele gezeigt, mit denen überprüft werden kann, ob in Bash eine reguläre Datei vorhanden ist.

1.1: Methode 1: Verwenden von einfachen oder doppelten Klammern

Verwenden von doppelten Klammern ]

#!/bin/bashFILE="/etc/passwd"if ];then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

Verwenden einzelner Klammern

#!/bin/bashFILE="/etc/passwd"if ;then echo "$FILE exists"else echo "$FILE doesn"t exist"fi

1.2: Methode 2: Verwenden des Testbefehls

test wird zum Überprüfen und Vergleichen von Dateitypen verwendet Werte.

#!/bin/bashFILE="/etc/passwd"if test -f $FILE; then echo "$FILE exists"else echo "$FILE missing"fi

1.3: Methode 3: Einzeilige Zeile

In diesem Beispiel können hier einfache oder doppelte Klammern verwendet werden. Ich würde empfehlen, immer doppelte Klammern zu verwenden, wenn Sie einen Liner-Code in die Shell schreiben, da dies das Risiko minimiert, dass beim Aufteilen von Wörtern Warnungen auf der Konsole angezeigt werden.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists" || echo "$FILE missing"

Die Anweisung nach && wird ausgeführt, wenn ERFOLGREICH ist. Wenn die erste Bedingung FALSE zurückgibt, wird die Anweisung mit || ausgeführt.

Überprüfen Sie in ähnlicher Weise mit dem Befehl test, ob eine reguläre Datei in Bash- oder Shell-Skript in einer Zeile vorhanden ist

#!/bin/bashFILE="/etc/passwd"test -f $FILE && echo "$FILE exists" || echo "$FILE missing"

2. Bash / Shell: Überprüfen Sie, ob eine Datei vorhanden ist (leer oder nicht leer ist).

Überprüfen Sie, ob die Datei vorhanden ist und wenn es leer ist oder Inhalt hat, verwenden wir das Attribut „-s“

2.1: Methode 1: Verwenden von einfachen oder doppelten Klammern

Überprüfen Sie in doppelten Klammern, ob eine Datei vorhanden und leer oder nicht leer ist. ]

#!/bin/bashFILE="/etc/passwd"if ]; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

Überprüfen Sie, ob die Datei vorhanden ist existiert und ist leer oder nicht leer in doppelten Klammern

if ; then echo "$FILE exists and not empty"else echo "$FILE doesn"t exist or is empty"fi

2.2: Methode 2: Verwenden des Testbefehls

Verwenden des Testbefehls kombinieren wir das Attribut -s, um zu überprüfen, ob Datei existiert und ist leer oder hat einen Inhalt:

2.3: Methode 3: Einzeilige

Wir können sowohl doppelte als auch einfache Klammern für einen solchen Liner verwenden, aber wie ich bereits sagte, würde ich die Verwendung von doppelten Klammern empfehlen.

#!/bin/bashFILE="/etc/passwd"test -s $FILE && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

In ähnlicher Weise können wir mit dem Testbefehl && und || verwenden Operator zum Überprüfen der Datei in einzeiligen Befehlen in unserem Shell-Skript.

#!/bin/bashFILE="/etc/passwd"] && echo "$FILE exists and not empty" || echo "$FILE doesn"t exist or is empty"

3. Bash / Shell: Überprüfen Sie, ob ein Verzeichnis vorhanden ist

Ich hoffe, Sie wissen, dass unter Linux alles eine Datei ist. Auf diese Weise wird ein Verzeichnis auch als Datei betrachtet. Wir können das Attribut „-d“ verwenden, um zu überprüfen, ob in der Shell-Programmierung ein Verzeichnis vorhanden ist.

3.1: Methode 1: Verwenden von doppelten oder einfachen Klammern

Wir können das Attribut -d in einfachen oder doppelten Klammern ] verwenden, um dies zu überprüfen Wenn ein Verzeichnis vorhanden ist.

#!/bin/bashDIR="/var/log"if ]; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

In diesem Beispiel verwenden wir einzelne Klammern, um zu überprüfen, ob das Verzeichnis im Shell-Skript voreingestellt ist.

#!/bin/bashDIR="/var/log"if ; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.2: Methode 2: Verwenden des Testbefehls

In diesem Beispiel verwenden wir den Testbefehl, um sicherzustellen, dass ein Verzeichnis vorhanden ist oder nicht, bevor wir eine bestimmte Aufgabe ausführen.

#!/bin/bashDIR="/var/log"if test -d $DIR; then echo "$DIR exists"else echo "$DIR doesn"t exist"fi

3.3: Methode 3: Einzeilige

In diesem Beispiel werden zur Überprüfung ein- und doppelte Klammern in einzeiliger Form verwendet für das Verzeichnis. Die Anweisung nach dem Operator && wird ausgeführt, wenn die erste Bedingung TRUE ist, und wenn sie FALSE ist, wird die Anweisung der Anweisung || ausgeführt .

#!/bin/bashDIR="/var/log"] && echo "$DIR exists" || echo "$DIR doesn"t exist"

Ich würde empfehlen, ] anstelle von zu verwenden Für solche Einzeiler-Codes in der Shell-Programmierung.

Ähnlich können wir mit && und || den Testbefehl zur Überprüfung verwenden Wenn ein Verzeichnis vorhanden ist

#!/bin/bashDIR="/var/log"test -d $DIR && echo "$DIR exists" || echo "$DIR doesn"t exist"

4. Bash / Shell: Überprüfen Sie, ob ein Verzeichnis vorhanden ist (leer oder nicht leer).

Es gibt keine Shell-Attribute Wie ich in allen anderen Beispielen und Szenarien in diesem Tutorial verwendet habe. Wir haben jedoch einige Hacks, mit denen wir überprüfen können, ob das Verzeichnis leer oder nicht leer ist.

4.1: Methode 1: Auflisten des Verzeichnisinhalts und Überprüfen von

In diesem Beispiel werden wir den Inhalt des Verzeichnisses auflisten, die Ausgabe unterdrücken und dann anhand des Exit-Codes prüfen, ob das Verzeichnis leer ist oder welche enthält Inhalt

#!/bin/bashDIR="/tmp"if ls -1qA $DIR | grep -q . ; then echo "$DIR is not -empty"else echo "$DIR is empty"fi

Wir können dies auch umkehren, indem wir eine NOT-Bedingung (!) setzen. Es würde also so aussehen:

#!/bin/bashDIR="/tmp"if ! ls -1qA $DIR | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

Die Ausgabe wäre in beiden Beispielskripten gleich.

4.2: Methode 2: Verwenden Suchbefehl

Wir können den Befehl find verwenden und dann die Ausgabe unterdrücken, um zu überprüfen, ob das Zielverzeichnis Inhalt enthält oder nicht.

#!/bin/bashDIR="/tmp"if find -- "$DIR" -prune -type d -empty | grep -q . ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

4.3: Methode 3: Auflisten des Inhalts

Wie bereits erwähnt, werden wir den Inhalt des Verzeichnisses auflisten, da es keine einfache Möglichkeit gibt, zu überprüfen, ob ein Verzeichnis leer ist oder einige Attribute nicht verwendet. Wenn Sie keine Ausgabe erhalten, ist das Verzeichnis leer oder nicht leer.

#!/bin/bashDIR="/tmp"if ] ; then echo "$DIR is empty"else echo "$DIR is not-empty"fi

5. Bash / Shell: Liste der zu testenden Attribute

Ebenso gibt es viele weitere Attribute, die Sie mit Shell-Skripten verwenden können, um nach verschiedenen Dateitypen zu suchen, z. B. nach symbolischen Links, Dateiberechtigungen usw.

ist

Attribute Was macht es?
-a FILE True, wenn FILE existiert
-b FILE Richtig, wenn FILE existiert und ist eine spezielle Blockdatei.
-c FILE True, wenn FILE existiert und ist eine spezielle Zeichendatei.
-d FILE True if FILE existiert und ist ein Verzeichnis.
True, wenn FILE existiert
-f FILE True, wenn FILE vorhanden ist und eine reguläre Datei ist
-g FILE True, wenn FILE existiert und sein Set-Group-ID-Bit gesetzt ist
-h FILE True, wenn FILE existiert und eine symbolische Verknüpfung
-k FILE True, wenn FILE existiert und sein „sticky“ -Bit gesetzt ist
-p FILE True, wenn FILE existiert und a ist Named Pipe (FIFO)
-r FILE True, wenn FILE existiert und ist lesbar
-s FILE True, wenn FILE existiert und hat eine Größe größer als Null
-u FILE True, wenn FILE vorhanden ist und das gesetzte Benutzer-ID-Bit gesetzt ist
-w FILE True, wenn FILE vorhanden und beschreibbar ist
-x FILE True, wenn FILE vorhanden und ausführbar ist
-G FILE True, wenn FILE vorhanden ist und der effektiven Gruppen-ID
gehört -L FILE True, wenn FILE vorhanden ist und eine symbolische Verknüpfung
-N FILE True, wenn FILE vorhanden ist und seit dem letzten Lesen geändert wurde
-o FILE True, wenn FILE vorhanden ist und dem Effektiven gehört Benutzer-ID
-S FILE True, wenn FILE vorhanden ist und ist ein Socket
True, wenn sich FILE1 und FILE2 auf dasselbe Gerät beziehen und Inode-Nummern
FILE1 -nt FILE2 True, wenn FILE1 ist neuer (je nach Änderungsdatum) als FILE2 oder wenn FILE1 vorhanden ist und FILE2 nicht
FILE1 -ot FILE2 Richtig, wenn FILE1 älter ist als FILE2 oder wenn FILE2 existiert und FILE1 nicht

Schlussfolgerung

Articles
Previous Post

Wie man sagt, dass Sie auf Französisch willkommen sind

Next Post

Konfigurieren des Remotezugriffs und Herstellen einer Verbindung zu einer Remote-SQL Server-Instanz mit ApexSQL-Tools

Schreibe einen Kommentar Antworten abbrechen

Neueste Beiträge

  • Beste Fotografieschulen der Welt, 2020
  • Souveräne Bürger bringen ihre regierungsfeindliche Philosophie auf die Straße
  • Leitfaden für Stuckreparaturkosten
  • Muckrakers (Deutsch)
  • Präzisionsonkologie

Archive

  • Februar 2021
  • Januar 2021
  • Dezember 2020
  • November 2020
  • Oktober 2020
  • September 2020
  • Deutsch
  • Nederlands
  • Svenska
  • Norsk
  • Dansk
  • Español
  • Français
  • Português
  • Italiano
  • Română
  • Polski
  • Čeština
  • Magyar
  • Suomi
  • 日本語
  • 한국어
Proudly powered by WordPress | Theme: Fmi by Forrss.