raven16
Goto Top

Ausrufezeichen in der Bash

Kann mir jemand mal erklären, was ! -f für eine Funktion im Skript hat?
Wüsste nicht wie ich eigenständig danach suchen kann, weil wenn ich ! bei google eingebe, dann kommt nicht viel bei rum :D
if [[ ! -f ${ODB_AL_PATH}/${OLDESTPATH} ]]

Content-Key: 196158

Url: https://administrator.de/contentid/196158

Printed on: April 19, 2024 at 00:04 o'clock

Member: Cthluhu
Cthluhu Dec 21, 2012 at 11:07:18 (UTC)
Goto Top
Ohne Hallo, aber ich antworte trotzdem mal:

Die eckigen Klammern sind keine Gruppierungsklammern, sondern Abkürzungen für das Programm "test". Schau dir mal die Man-Page von Test an. Da steht dass "!" für negieren und "-f" für die Überprüfung ob eine Datei existiert steht.

lg

Cthluhu
Member: SHuesken
SHuesken Dec 21, 2012 at 11:22:50 (UTC)
Goto Top
Normalerweise dient das Ausrufezeichen in der Bash zum Wiederholen eines Befehls und der Schalter -f zum deklarieren von eingebetteten Befehlen (Bash Builtin Commands) der Bash.

Gruss
SHuesken
Member: raven16
raven16 Dec 21, 2012 updated at 12:32:20 (UTC)
Goto Top
Mahlzeit, sry für die fehlende Begrüßung.

Okay ich glaube Cthluhu hat recht in diesem Fall, weil der Quelltext folgendermaßen aussieht:
OLDESTFILE=$(ssh ${DA_HOST} ls -t1 ${DA_PATH}/${FILEXTENSION} 2> /dev/null | sort -n | head -1)
if [[ ! -f ${ODB_AL_PATH}/${OLDESTFILE} ]]
then
   ...
else
    to_stderr "about to move ${DA_HOST}:${OLDESTFILE} ${ODB_AL_PATH} - EXITING"  
fi
Also wenn dieser Pfad existiert, dann soll er bei ... etwas ausführen was hier nicht relevant ist und andernfalls soll er die meldung ausgeben, dass die Datei schon existiert

also wird dann mit ! negiert und mit -f prüfe ich ob der Pfad mit der Datei schon vorhanden ist.
Aber mir fällt dabei gerade auch auf, dass dann mein Vorgänger, der dieses Skript programmiert hat, da Schwachsinn geschrieben hat, weil OLDESTFILE schon einen kompletten Pfad heraus sucht und in der IF-Abfrage hängt der diesen kompletten Pfad hinter noch einen Pfad... wirsch
Dann hat das nur immer funktioniert, weil die IF-Abfrage negiert war.
Member: SHuesken
SHuesken Dec 21, 2012 at 12:47:08 (UTC)
Goto Top
Jap, in diesem Fall ist die Antwort von Cthuluhu korrekt. face-smile

Gruss
SHuesken
Mitglied: 64748
64748 Dec 21, 2012 at 20:35:56 (UTC)
Goto Top
Hallo zusammen,

der Test -f testet nicht nur ob die Datei existiert, sondern auch, ob es sich um eine "reguläre Datei" handelt, also z.B. nicht um ein Verzeichnis und nicht um einen Hardlink oder Symlink.

Für genauere Infos lese die manpage von bash und suche den Absatz "CONDITIONAL EXPRESSIONS".

Markus