La soluzione è piuttosto semplice. Basta dare spazio tra if e le parentesi quadre di apertura come indicato di seguito.
if [ -f "$File" ]; then
<code>
fi
Ci deve essere uno spazio tra if
e [
, in questo modo:
#!/bin/bash
#test file exists
FILE="1"
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo :"$FILE is a regular file"
fi
...
Questi (e le loro combinazioni) sarebbero tutti errati troppo:
if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then
Questi invece vanno tutti bene:
if [ -e "$FILE" ];then # no spaces around ;
if [ -e "$FILE" ] ; then # 1 or more spaces are ok
A proposito, questi sono equivalenti:
if [ -e "$FILE" ]; then
if test -e "$FILE"; then
Anche questi sono equivalenti:
if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists
E la parte centrale del tuo script sarebbe stata migliore con un elif
come questo:
if [ -f "$FILE" ]; then
echo $FILE is a regular file
elif [ -d "$FILE" ]; then
echo $FILE is a directory
fi
(Ho anche eliminato le virgolette nel echo
, poiché in questo esempio non sono necessari)