Einfache DAU-Frage if -f -> no such file or directory

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
petiz
Beiträge: 61
Registriert: 19.04.2009 13:10:10
Wohnort: Hannover

Einfache DAU-Frage if -f -> no such file or directory

Beitrag von petiz » 02.09.2014 11:34:31

Hallo zusammen,


ich habe eine -vermutlich- ganz einfache Frage:


Ich will in einer IF-Bedingung überprüfen ob eine Datei existiert:

Code: Alles auswählen

#!/bin/bash

if[ -f /Users/peter/.ssh/test ]
then
   ...
else
   ...
fi


kriege aber jedesmal folgende Fehlermeldung bei Ausführung des Scriptes:

"changekey.sh: line 3: if[ -f /Users/peter/.ssh/test ]: No such file or directory"
changekey.sh: line 4: syntax error near unexpected token `then'
changekey.sh: line 4: `then'



Was ist an meiner If-Bedingung falsch? Ich habe mich genau an eine Vorgabe gehalten


Vielen Dank für eure Hilfe.

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Einfache DAU-Frage if -f -> no such file or directory

Beitrag von 4A4B » 02.09.2014 11:41:30

Zwischen if und [ braucht es noch ein Leerzeichen

petiz
Beiträge: 61
Registriert: 19.04.2009 13:10:10
Wohnort: Hannover

Re: Einfache DAU-Frage if -f -> no such file or directory

Beitrag von petiz » 02.09.2014 13:38:01

Dankeschön! Jetzt funktioniert alles super.

Aber warum muss da ein Leerzeichen hin? Würde gerne die Syntax/Logik dahinter verstehen :)

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: Einfache DAU-Frage if -f -> no such file or directory

Beitrag von 4A4B » 02.09.2014 13:46:14

[ ist auch nur ein Kommando, gleichbedeutend mit test; wenn test als [ aufgerufen wird, erwartet es allerdings als letztes Argument noch ein ]

Du könntest also auch schreiben:

Code: Alles auswählen

if test -f /Users/peter/.ssh/test
Das Kommando [ dient also dazu, die Klammern optisch nachzubilden, wie sie aus anderen Sprachen bekannt sind. Allerdings müssen diese mit Leerzeichen getrennt sein. Ohne diese würde die Shell ein Kommando if[ erkennen, welches es nicht gibt.

Benutzeravatar
smutbert
Beiträge: 8342
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Einfache DAU-Frage if -f -> no such file or directory

Beitrag von smutbert » 02.09.2014 13:57:35

Ok, 4A4B war viel schneller, aber damit ich es nicht umsonst geschrieben habe, poste ich meine Antwort trotzdem auch noch…

Es heißt nun einmal if und nicht if[. Es könnte ja auch einen Befehl/einr ausführbare Datei mit dem Namen "if[" geben, gibt es aber nicht.

[ ist ein eigener Befehl, der in viele Shells bereits eingebaut ist und eigentlich nur eine Abkürzung für test. Die beiden Befehle sind also identisch

Code: Alles auswählen

[ -f /Users/peter/.ssh/test ]
test -f /Users/peter/.ssh/test
Beide stehen übrigens auch zur Verfügung, wenn sie nicht bereits in der Shell eingebaut sind, wovon du dich mit

Code: Alles auswählen

which "["
which test
überzeugen kannst.

Antworten