Erreur de syntaxe près du symbole inattendu "else"

Résolu/Fermé
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - Modifié le 6 déc. 2022 à 11:15
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - 6 déc. 2022 à 11:49

Bonjour,

J'ai écrit un programme de ce genre:

n=...
for file in *
do
    if [ $n -eq 0 ] then
        exit 1;
    else
        if [... ]
        then
            echo ...
        elif [ .. ]
        then
            echo...
        elif [...]
        then
            echo ...
        fi
    fi
done

Le terminal me dit erreur de syntaxe près du symbole inattendu "else", mais je ne comprends pas. J'ai bien fermé mon if externe avec fi et je n'arrive toujours pas à voir quel est le problème.

A voir également:

6 réponses

mamiemando Messages postés 32969 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 février 2024 7 727
Modifié le 6 déc. 2022 à 11:18

Bonjour,

Explication du problème

  • Il manque un ";" devant le then (ou alors, il faut que tu passes à la ligne devant le then).
  • Le ";" après exit 1 n'est pas faux, mais superflu.
  • Je te recommande (même si ça n'est pas la source du problème) de toujours entourer de guillemets l'évaluation d'une variable (e.g., "$i" au lieu de $i). C'est un peu plus lourd à écrire, mais si ta variable contient des espaces, ça évitera que ton interpréteur shell considère que la valeur de la variable s'arrête au premier espace.

Pour rappel en bash, le ";" sert à mettre plusieurs instructions (qui devraient être sur des lignes séparées) sur une même ligne. Toutes sont évaluées de gauche à droite, peut importe le résultat des commandes qui précédent sur cette même ligne (contrairement à &&).

Exemple

#!/bin/sh

n=1
for i in `seq 1 10`
do
    if [ "$n" -eq 0 ]; then
        exit 1
    else
        if [ "$i" -lt 2 ]
        then
            echo "i vaut $i et est plus petit que 2"
        elif [ "$i" -gt 7 ]
        then
            echo "i vaut $i et est plus grand que 7"
        elif [ "$i" -gt 3 ]
        then
            echo "i vaut $i et est plus grand que 3"
        fi
    fi
done

Résultat

i vaut 1 et est plus petit que 2
i vaut 4 et est plus grand que 3
i vaut 5 et est plus grand que 3
i vaut 6 et est plus grand que 3
i vaut 7 et est plus grand que 3
i vaut 8 et est plus grand que 7
i vaut 9 et est plus grand que 7
i vaut 10 et est plus grand que 7

Bonne chance

1
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
6 déc. 2022 à 11:15

donc c'est que ça! merci beaucoup

0
jee pee Messages postés 39349 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 29 février 2024 9 193
Modifié le 6 déc. 2022 à 11:16

Bonjour,

Pourquoi ne pas en ligne 4 mettre le then, comme les autres if, sur la ligne suivante ?

Ou alors une syntaxe en une ligne, mais de mémoire il existe des différences en sh et bash

if [ $n -eq 0 ]; then exit 1;

0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
6 déc. 2022 à 11:17

en fait moi je me disais que c'est la meme chose

Et d'ailleurs shelle et bash c'est quoi la différence?car moi j'arrive pas a les distinguer

0
mamiemando Messages postés 32969 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 février 2024 7 727
6 déc. 2022 à 11:21
  • Il existe plein de shells : bash, dash, ksh, tcsh, zsh, etc.
  • Le shell seul est assez limité et c'est pourquoi il y a eu toutes ces évolutions.
  • Au final, tous ces shells ont une base commune (le langage shell), mais chacun à en plus un jeu de primitives spécificiques (par exemple l'opérateur $( ... ) en bash).

Bonne chance

0
jee pee Messages postés 39349 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 29 février 2024 9 193
6 déc. 2022 à 11:23

Le shell est le nom générique de l'interpréteur de commande. A l'origine ce programme était sh, il y a aussi ksh, ... et désormais souvent bash. Les syntaxes peuvent très légèrement être différentes. Et tapant ps dans la fenêtre terminal, tu as les processus en cours, et le nom du shell que tu utilises.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
6 déc. 2022 à 11:38

ah d'accord merci donc le bash est juste une branche du shell

0
mamiemando Messages postés 32969 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 février 2024 7 727
6 déc. 2022 à 11:42

Oui c'est l'idée, mais je dirais plutôt un type de shell  (ou une variante de shell, ou une déclinaison de shell), car le mot "branche" a un autre sens en programmation.

0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
6 déc. 2022 à 11:49

OK merci

0