Die Lösung ist ziemlich einfach. Geben Sie einfach ein Leerzeichen zwischen if und den öffnenden eckigen Klammern ein, wie unten angegeben.
if [ -f "$File" ]; then
<code>
fi
Zwischen if
muss ein Leerzeichen stehen und [
, etwa so:
#!/bin/bash
#test file exists
FILE="1"
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo :"$FILE is a regular file"
fi
...
Diese (und ihre Kombinationen) wären alle falsch auch:
if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then
Diese hingegen sind alle in Ordnung:
if [ -e "$FILE" ];then # no spaces around ;
if [ -e "$FILE" ] ; then # 1 or more spaces are ok
Übrigens sind diese äquivalent:
if [ -e "$FILE" ]; then
if test -e "$FILE"; then
Diese sind auch gleichwertig:
if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists
Und der mittlere Teil Ihres Skripts wäre mit einem elif
besser gewesen so:
if [ -f "$FILE" ]; then
echo $FILE is a regular file
elif [ -d "$FILE" ]; then
echo $FILE is a directory
fi
(Ich habe auch die Anführungszeichen in echo
weggelassen , da sie in diesem Beispiel unnötig sind)