Forum Programmation.shell erreur if , fi ?

Posté par  .
Étiquettes : aucune
0
2
août
2009
Bonjour
j'écris juste un script pour changer les noms de fichiers de minuscule en majuscule :



#!/bin/bash -x

myscriptname=`basename $0`;

for i in `ls -A`
do
if [ $i = $myscriptname ];
then
echo "Sorry, can't rename myself!"
elif [ $i != $myscriptname ];
newname=`echo $i | tr a-z A-Z`
mv $i $newname
fi

done








Bash me donne toujours l'erreur de sortie sur le fi , l'output du debug


++ basename ./tr1.sh
+ myscriptname=tr1.sh
./tr1.sh: line 15: syntax error near unexpected token `fi'
./tr1.sh: line 15: ` fi'


J'ai beau regarder je ne vois pas ce qu'il me reproche . Une idée ?
  • # then

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

    Je dirais qu'il doit te manquer un "then" après le ";" de ton "if".
    • [^] # Re: then

      Posté par  . Évalué à 2.

      Mais bon sang c'est bien sur , merci , faut que j'aille me coucher ca va vraiment plus la :)
    • [^] # Re: then

      Posté par  . Évalué à 3.

      le then après le if est bien là. Par contre, il en faut aussi un après le elif !
      • [^] # Re: then

        Posté par  . Évalué à 5.

        voire meme virer le elif et mettre un else
        car finalement la 2e condition ne sert qu'a confirmer qu'on n'est pas dans le premier cas
  • # y'a pas que ça...

    Posté par  . Évalué à 7.

    Outre le then manquant indiqué plus haut, tu va avoir des soucis si certains fichiers comportent des espaces. Il faut que tu liste les fichiers différemment (utilise * plutôt que de lancer un ls, en plus tu économise un fork), et il te faut des guillements de-ci de-là (autour de chaque variable qui représente un fichier).


    for i in *; do
    [ "$i" = "$myscriptname" ]
    ...


    (je passe sur le fait que je suis contre l'emploi d'une variable "i" quand il n'y a pas d'incrément, on va dire que c'est juste cosmétique).

    Un autre problème : comment tu fais si tu as un fichier qui est nommé comme ton script, mais que tu es en train de travailler sur un autre répertoire ? Ce fichier ne sera pas renommé, il faut prévoir ce cas aussi.

    Cela dit, une fois que tu te seras bien amusé à écrire ton script et à imaginer ce qui pourrait mal se passer, tu pourras utiliser rename ;-)

Suivre le flux des commentaires

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