web-dev-qa-db-fra.com

Erreur de syntaxe près du jeton inattendu «alors»

J'ai tapé le code de la même manière que La ligne de commande Linux: une introduction complète , page 369 mais invite l'erreur:

line 7 `if[ -e "$FILE" ]; then`

le code est comme:

#!/bin/bash
#test file exists

FILE="1"
if[ -e "$FILE" ]; then
  if[ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
  if[ -d "$FILE" ]; then
     echo "$FILE is a directory"
  fi
else 
   echo "$FILE does not exit"
   exit 1
fi
   exit

Je veux savoir ce qui a introduit l'erreur? Comment puis-je modifier le code? Mon système est Ubuntu.

26
Amitābha

Il doit y avoir un espace entre if et [, comme ça:

#!/bin/bash
#test file exists

FILE="1"
if [ -e "$FILE" ]; then
  if [ -f "$FILE" ]; then
     echo :"$FILE is a regular file"
  fi
...

Celles-ci (et leurs combinaisons) seraient toutes incorrectes aussi:

if [-e "$FILE" ]; then
if [ -e"$FILE" ]; then
if [ -e "$FILE"]; then

D'un autre côté, tout va bien:

if [ -e "$FILE" ];then  # no spaces around ;
if     [    -e   "$FILE"    ]   ;   then  # 1 or more spaces are ok

Btw ceux-ci sont équivalents:

if [ -e "$FILE" ]; then
if test -e "$FILE"; then

Ce 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 ne sont pas nécessaires)

57
janos