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, 3716 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 Umgebungsvariable PATH Splitten (1)

Frage von Marabunta zum Thema Batch & Shell ...

Batch & Shell
Dateien umbennen und verschieben mit bash (3)

Frage von sbsnewbie zum Thema Batch & Shell ...

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

Frage von crackhawk zum Thema Debian ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(2)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows 7
gelöst Lokales Adminprofil defekt (25)

Frage von Yannosch zum Thema Windows 7 ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

LAN, WAN, Wireless
gelöst Statische Routen mit ISC-DHCP Server für Android Devices (22)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Exchange Server
gelöst Migration Exchange 2007 zu 2013 - Public Folder teilweise weg (16)

Frage von Andy1987 zum Thema Exchange Server ...