Erreur de syntaxe près du symbole inattendu "else"
RésoluTheo_0055 Messages postés 273 Date d'inscription Statut Membre Dernière intervention -
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.
- Erreur de syntaxe près du symbole inattendu « ( »
- Symbole poisson témoin de jéhovah - Accueil - Maison
- Symbole spéciaux - Guide
- On off symbole ✓ - Forum Matériel & Système
- Symbole attention word - Forum Word
- Au carré symbole ✓ - Chromebook
6 réponses
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
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;
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
- 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
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question