La solution est assez simple. Il suffit de laisser un espace entre if et les accolades ouvrantes comme indiqué ci-dessous.
if [ -f "$File" ]; then
<code>
fi
Il doit y avoir un espace entre if
et [
, comme ceci :
#!/bin/bash
#test file exists
FILE="1"
if [ -e "$FILE" ]; then
if [ -f "$FILE" ]; then
echo :"$FILE is a regular file"
fi
...
Ceux-ci (et leurs combinaisons) seraient tous incorrects aussi :
if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then
Celles-ci, par contre, sont toutes correctes :
if [ -e "$FILE" ];then # no spaces around ;
if [ -e "$FILE" ] ; then # 1 or more spaces are ok
Au fait, ceux-ci sont équivalents :
if [ -e "$FILE" ]; then
if test -e "$FILE"; then
Ceux-ci sont également équivalents :
if [ -e "$FILE" ]; then echo exists; fi
[ -e "$FILE" ] && echo exists
test -e "$FILE" && echo exists
Et, la partie centrale de votre script aurait été meilleure avec un elif
comme ceci :
if [ -f "$FILE" ]; then
echo $FILE is a regular file
elif [ -d "$FILE" ]; then
echo $FILE is a directory
fi
(J'ai également supprimé les guillemets dans le echo
, car dans cet exemple, ils sont inutiles)