Script shell - boucle for

charline159 Messages postés 216 Statut Membre -  
Exileur Messages postés 1621 Statut Membre -
Bonjour,

Mon but est de rélaliser un script où l'utilisateur indiquent des "fichier" qu'il veut renommer en "fichier-old".

#!/bin/bash

#Si il n’y aucun fichier indiqué ou si au moins un des fichiers indiqués n’existe pas, alors je (re)demande une saisie.
if [ -z $1 ] || [ ! -e $* ]
then
        read -p "Veuillez indiquer un ou des fichier(s) existant(s)." Fichier
        mv $fichier $fichier-old

#Sinon je renomme le ou les fichier(s) indiqués en paramètres.
else
        for fichier in $*
        do
                mv $fichier $fichier-old
        done
fi


Le script fonctionne mais j'ai deux soucis:

- si j'indique un fichier qui n'existe pas, alors le script me demande bel et bien une saisie. Mais si j'indique plusieurs fichiers dont au moins un qui n'existe pas, le script plante et indique "ligne 5: opérateur binaire attendu"

- à la ligne 7, l'utilisateur ne peut indiquer qu'UN seul fichier. Comment faire pour qu'elle en prenne en compte plusieurs?

Merci pour votre aide !


A voir également:

1 réponse

Exileur Messages postés 1621 Statut Membre 150
 
Hello,

Segmente ton code.

Contrôle la donnée (existe ? combien de fichiers ?), traite les données.

if [ ! -f tonfichier]
then
#tu redemande le fichier
fi

#ici soit le fichier est en paramétre soit l'utilisateur l'a taper. tu peux traiter ta donné.

/bin/mv $fichier $fichier_old

A plus tard sur l'tar

N'oubliez pas de marquez votre post comme résolut lorsque vous avez eu les réponses à vos questions...
Au royaume des aveugles, les borgnes sont rois.
1
charline159 Messages postés 216 Statut Membre 1
 
Salut!
J'ai suivi ton schéma du coup, et j'ai segmenté en deux parties:

#!/bin/bash

#si l'utilisateur n'a pas indiqué de fichier(s), alors je lui en demande
if [ ! -f "$*" ]
then
        while [ ! -f "$fichier" ]
        do
                read -p "Veuillez indiquer un ou des fichier(s) existant(s)." fichier
        done
fi


#le(s) fichier(s) sont ensuite renommés
for fichier in "$*"
do
        mv $fichier $fichier-old
done

Le script ne marche que si j'indique dès le début un fichier en paramètre.
Sinon si j'indique deux fichiers, il me demande tout de même de saisir le nom d'un fichier...
0
Exileur Messages postés 1621 Statut Membre 150
 
        for fichier in $*
        do
                if [ -f $fichier] 
                then 
                         /bin/mv $fichier{,-old}
                         echo "$fichier déplacé avec succés"
                fi
                else
                        echo "Le fichier $fichier n'existe pas" 
                fi
        done
0
Exileur Messages postés 1621 Statut Membre 150
 
Tu as du code qui se répéte.
Fais une fonction ou change ton code pour que le mv n'y soit pas deux fois.
0
charline159 Messages postés 216 Statut Membre 1
 
Oui je n'ai pas encore vu les fonctions. Je le ferrai quand j'aurais abordé cette notion :)
0
Exileur Messages postés 1621 Statut Membre 150
 
while [ ! -f "$fichier" ]
do
read -p "Veuillez indiquer un ou des fichier(s) existant(s)." fichier
done

------------------------------

Si le fichier $fichier n'existe pas.
Indiquer un fichier existant.
Fin

Je suis pas sure que ça soit ce que tu veuilles ^
0