Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Ausrufezeichen in der Bash

Frage Linux

Mitglied: raven16

raven16 (Level 1) - Jetzt verbinden

21.12.2012, aktualisiert 13:11 Uhr, 3535 Aufrufe, 5 Kommentare

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
01.
if [[ ! -f ${ODB_AL_PATH}/${OLDESTPATH} ]]
Mitglied: Cthluhu
21.12.2012 um 12:07 Uhr
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
Bitte warten ..
Mitglied: SHuesken
21.12.2012 um 12:22 Uhr
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
Bitte warten ..
Mitglied: raven16
21.12.2012, aktualisiert um 13:32 Uhr
Mahlzeit, sry für die fehlende Begrüßung.

Okay ich glaube Cthluhu hat recht in diesem Fall, weil der Quelltext folgendermaßen aussieht:
01.
OLDESTFILE=$(ssh ${DA_HOST} ls -t1 ${DA_PATH}/${FILEXTENSION} 2> /dev/null | sort -n | head -1) 
02.
if [[ ! -f ${ODB_AL_PATH}/${OLDESTFILE} ]] 
03.
then 
04.
   ... 
05.
else 
06.
    to_stderr "about to move ${DA_HOST}:${OLDESTFILE} ${ODB_AL_PATH} - EXITING" 
07.
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.
Bitte warten ..
Mitglied: SHuesken
21.12.2012 um 13:47 Uhr
Jap, in diesem Fall ist die Antwort von Cthuluhu korrekt.

Gruss
SHuesken
Bitte warten ..
Mitglied: hmarkus
21.12.2012 um 21:35 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Bash Script soll neue Datei erzeugen (2)

Frage von SpeakerST zum Thema Batch & Shell ...

Linux
gelöst Umlaute zählen - Bash-Script (5)

Frage von plutowitsch zum Thema Linux ...

Debian
gelöst Bash - String zwischen zwei Kommata ausgeben (3)

Frage von plutowitsch zum Thema Debian ...

Windows 10
gelöst Kein Upgrade auf Xenial möglich bei integrierter Windows Bash? (3)

Frage von Moddry zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...