Forum Programmation.shell probleme if

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
18
fév.
2019

Bonjour à tous
Je souhaiterais simplement détecté la présence d'un dossier pourtant avec ce script

fichier="beta"
if [ -d $fichier ]; then
echo "$fichier existe";
else
echo "$fichier n'est pas present";
fi

j'ai les erreurs suivantes

./test.sh: line 6: syntax error near unexpected token fi'
./test.sh: line 6:
fi'

aurez vous une solution ?

  • # Le code semble correct mais…

    Posté par  . Évalué à 2.

    Salut tout seul,

    Est-ce qu'il y a une ligne dans ton script indiquant l’interpréteur à utiliser (première ligne, commençant par #!) ? Sinon quel est le shell courant ?

    Peux-tu vérifier qu'il n'y a pas quelque part un caractère invisible qui viendrait polluer le code, comme une espace insécable ou quelque chose dans ce genre-là ?

  • # plusieurs erreur de base

    Posté par  . Évalué à 3.

    ton ; en fin de ligne n'a pas lieu d'etre

    cela declenche alors l'erreur APRES le present";
    donc sur le fi

    ca semble marcher avant le else, donc soit ton shell le tolere, et le fi est alors inutile
    ton script resssemblerait alors à ca

    if [ tontest ]
    then
      echo "ca existe";
    else
      echo "ca n'esite pas";

    ou bien, si c'est un shell standard

    if [ tontest ]
    then
      echo "ca existe"
    else
      echo "ca n'existe pas"
    fi

    si ton shell est bash, ton test est faux, car -d va tester si c'est un directory (un dossier), le test pour savoir si c'est un fichier c'est -f, celui pour savoir si ca existe -e

    • [^] # Re: plusieurs erreur de base

      Posté par  . Évalué à 2.

      Il me semble que le but initialbest bien de tester la présence d'un directory.

      • [^] # Re: plusieurs erreur de base

        Posté par  . Évalué à 3.

        Il me semble que le but initialbest bien de tester la présence d'un directory.

        oui, c'est ce que dit l'enoncer,
        mais le code utilisant une variable $fichier
        cela m'a mis la confusion

    • [^] # Re: plusieurs erreur de base

      Posté par  . Évalué à 1.

      il peut mettre un ";" après le test du if si il veut avoir le then sur la même ligne, mais faut mettre un espace avant le ";"

      fichier="beta"
      if [ -d $fichier ] ; then
          echo "$fichier existe";
      else
          echo "$fichier n'est pas present";
      fi
      • [^] # Re: plusieurs erreur de base

        Posté par  (site web personnel) . Évalué à 2.

        Non, l'espace n'est pas nécessaire.

        Debian Consultant @ DEBAMAX

        • [^] # Re: plusieurs erreur de base

          Posté par  . Évalué à 1.

          Effectivement, toutes mes confuses, l'espace n'est pas nécessaire.
          J'ai tellement pris l'habitude d'en mettre un pour la lisibilité que j'en était arrivé à le croire obligatoire.

          • [^] # Re: plusieurs erreur de base

            Posté par  . Évalué à 1.

            Peut-être confonds-tu avec les espace avant/après les crochets fermant/ouvrant ? Je me suis déjà bêtement fait avoir avec ça.

            • [^] # Re: plusieurs erreur de base

              Posté par  (site web personnel) . Évalué à 4.

              C'est effectivement un point qui revient régulièrement dans les formations shell…

              Rappel rapide : [ est une commande, donc doit être séparée du if précédent. Puis viennent ses arguments, donc espace également après [. Quant à ], c'est un argument à passer (le dernier) à la commande [ donc doit être séparé des autres arguments. Après le ], pas de contrainte particulière (si on a un ; notamment, il peut être collé).

              Exemple sans if pour montrer l'aspect facultatif des séparations en dehors des crochets : [ 0 = 1 ]||[ 1 = 1 ]

              Debian Consultant @ DEBAMAX

    • [^] # Re: plusieurs erreur de base

      Posté par  (site web personnel) . Évalué à 4.

      Tiens, personne n'a encore crié sur l'absence de "" autour de $fichier. Ouille ouille ouille si $fichier contient des espaces … ;-)

  • # CRLF?

    Posté par  . Évalué à 1.

    Hello

    N'y aurait-il pas un caractère spécial type CR (\r ou ^M) dans le fichier ?
    Vous pouvez utiliser la commande 'cat' avec l'argument -A (cat -A script) et vérifier le cas échéant.

    Cdt,

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.