Forum Programmation.shell remplacer minuscule par majuscule

Posté par  .
Étiquettes : aucune
1
24
jan.
2009
Bonjour , j'ai écris un petit script pour remplacer les caractere minuscule en majuscule des fichiers d'un repertoire :


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

Mais il me retourne toujours la meme erreur malgrès mes recherche sur google
quelqu'un pourrait-il m'expliquer ?

#/bin/bash -x

myscriptname=`basename $0`;
#exit;
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

#END
  • # if then else

    Posté par  . Évalué à 4.

    sed s/elif/else/

    si tu mets elif, ca correspond à un "else if", il te faut donc un then à la suite
    si tu mets else à la place de elif, ça marche aussi
    • [^] # Re: if then else

      Posté par  . Évalué à 2.

      Ha oui , MERCI :)
    • [^] # Re: if then else

      Posté par  . Évalué à 2.

      une autre question : lorsque je lance le script avec la commande source monscript.sh , il me convertie aussi le nom du script alors que celui ci devait rester identique . Une explication ?
      • [^] # Re: if then else

        Posté par  . Évalué à 4.

        je dirais à cause du :
        if [ $i = $myscriptname ];
        alors que ls -A renvoie les extensions et que $myscriptname n'en contient pas à cause du basename.
        Je te propose cette écriture, non testée vu l'heure:

        #/bin/bash -x

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


        ou alors, plus simple, sans être un script, en te mettant en console dans le répertoire où sont les fichiers à modifier:
        rename ’y/a-z/A-Z/’ *
  • # source ?

    Posté par  . Évalué à 1.

    Salut,

    basename ne supprime pas le suffixe, sauf si on lui précise.
    Le problème ici, c'est l'instruction "source" : le script tr2.sh n'est pas vraiment exécuté. En fait son contenu est lu par le shell appelant, et c'est ce contenu qui est exécuté par le script appelant et dans ce cas, $0 vaut "bash".
    Mais ici, source ne sert à rien : on l'utilise quand on veut récupérer des variables modifiées dans le script appelé.

    Une autre remarque concernant ton script : ce serait bien de vérifier que le nom n'est pas déjà en majuscule, pour éviter l'affichage d'erreurs.

    A+
    JJD
  • # Commentaire supprimé

    Posté par  . Évalué à 2.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Commentaire supprimé

      Posté par  . Évalué à 2.

      Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

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