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, 3893 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 ..
Ähnliche Inhalte
Batch & Shell
Bash sqlplus oder Bash Fehler? (7)

Frage von Marabunta zum Thema Batch & Shell ...

Batch & Shell
gelöst Bash Mail senden (7)

Frage von Marabunta zum Thema Batch & Shell ...

Ubuntu
Nregp ereignis für bash-script (3)

Frage von rsadmchef zum Thema Ubuntu ...

Debian
gelöst Passwörter in Skripten die mit Dollar-Ausrufezeichen beginnen (5)

Frage von crackhawk zum Thema Debian ...

Neue Wissensbeiträge
Linux Netzwerk

Ping und das einstellbare Bytepattern

(1)

Erfahrungsbericht von LordGurke zum Thema Linux Netzwerk ...

Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Heiß diskutierte Inhalte
Microsoft Office
Office Druck fehler (18)

Frage von DaistwasimBusch zum Thema Microsoft Office ...

Netzwerkmanagement
Windows Server 2008 R2: "netsh reset" nicht verfügbar? (11)

Frage von RickTucker zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
Uninitialisierte Festplatte - Daten retten (11)

Frage von peterla zum Thema Festplatten, SSD, Raid ...

Windows Server
Zertifikat am DC erneuern funktioniert nicht (11)

Frage von takvorian zum Thema Windows Server ...