Boucle pour vérifier les chemins de multiples répertoires

Bonsoir,

J’ai adapté un script pour valider l’existence d’un répertoire :

[code]#!/bin/sh

PATH="/home"
USR1=“usr1”

if [ -d $PATH/$USR1 ]
then
echo "Le dossier $USR1 existe"
else
echo “Le dossier $USR1 n’existe pas” && exit 1
fi[/code]

Or, je voudrais maintenant effectuer la même opération pour plusieurs répertoires. Facile dans les variables (USR1, USR2, etc…) mais dans la condition if j’imagine bien que cela ne va pas être possible et j’anticipe donc qu’il va falloir faire une boucle for, d’autant plus que les noms d’utilisateurs peuvent avoir une casse très différente (USR1, USR2, mais aussi TEST3, TOTO12 etc…).

Est-ce que quelqu’un pourrait m’aiguiller ?

Merci d’avance,

Aurélien

Voici un exemple d’utilisation du for du bourn shell :

[code]var=“nom prenom haha”

for nom in $var; do
echo "/home/$nom"
done[/code]

Après la recherche des noms peut se faire d’une autre manière. Tu les trouve où ?

Merci pour ta réponse.

J’ai parlé de dossiers utilisateurs pour essayer de faire comprendre simplement mon problème mais cela peut être un répertoire quel qu’il soit dans le système.

Le tout étant pour moi d’arriver à faire comprendre au script que je souhaite écrire une seule fois les instructions et indiquer “tant que tu trouves les variables que j’ai écrites, refais-moi là même vérification”.

Bien sûr je parle ici de vérification de chemin, mais cela pourrait également être valable pour des actions sur ces chemins. Disons pourquoi pas une compression de tous les répertoires dont le chemin est valide…

J’essaye de faire clair mais comme je ne maîtrise pas bien la programmation, hein…

Merci en tous cas.

J’ai fait quelques recherches et je suis tombé sur ce tutoriel très intéressant qui permettrait de faire l’opération d’une autre manière. Cela consiste à lire un fichier texte qui renseignerait la variable.

J’ai donc créé un simple fichier texte (paths.txt) avec un chemin (/home/USR1) dedans et ai lancé cette ligne de commande qui renvoie bien la chaîne :

Pour l’inclure dans mon script, j’ai tenté cela :

Malheureusement, ça me renvoie une erreur ./script.sh: line 16: [: too many arguments

Une idée pour faire ça, d’autant plus que si cela venait à marcher, je comprends mal comment le script arriverait à la fin des premières opérations pour remonter tout en haut et reprendre les valeurs suivantes dans le fichier ?

Merci de votre aide.

Aurélien

Je suis désolé je ne comprend pas très bien.

Ceci est équivalent à

Ici pour le problème c’est que dans un script tout ce qui est entre deux " ou entre deux ’ et une chaîne de caractère. C’est pas considérés comme quelque chose à exécuter. Pour que ça le soit il faut l’entourer ainsi :

ou ainsi

Si tu veut faire un traitement queconque sur tes dossiers tu peut directement procéder ainsi :

while read line; do action_que_tu_veut; done < paths.txt

Ah merci, c’est bien plus clair et effectivement le cat fait pareil dans l’absolu, mais ce que j’ai compris du tutoriel c’était la notion de boucle (via while) pour passer les paths en variable tant qu’il y en a dans le fichier.

Exemple :

[code]PATH_GLOBAL="/home/"
PATH=[ici le fichier texte qui renseigne tous les paths]

if [ -d $PATH_GLOBAL/$PATH ]
then
echo "Verification du chemin OK"
else
echo “Le chemin ne correspond pas !” && exit 1
fi[/code]

Bien compris ton dernier morceau de code mais comme la variable est déclarée tout au début du script cela voudrait dire qu’il faudrait entourer toutes les actions du script par le while alors même que le done < paths.txt qui indique le fichier que l’on va chercher tout à la fin du script, soit après avoir eu besoin des infos à l’intérieur.

Désolé, je suis un peu lent à la détente en programmation…

[code]PATH_GLOBAL="/home/"

while read PATH; do
if [ -d $PATH_GLOBAL/$PATH ]
then
echo "Verification du chemin OK"
else
echo “Le chemin ne correspond pas !” && exit 1
fi
done < paths.txt[/code]

Marche très bien PATH_GLOBAL est accessible de partout et la lecture du fichier se fait en même temps que le traitement de la boucle ce qui te donne accès à PATH. :slightly_smiling:

Formidable, c’est exactement ce que je cherchais !

Merci beaucoup.

Aurélien

Il y a pas de quoi :smiley: