• [^] # Re: Ben, man bash ...

    Posté par . En réponse au message utilisation de S_ISDIR et S_ISREG. Évalué à 3.

    Manifestement, ton script n'est pas complet : il manque les fins de boucles for.
    En plus:
    - le cd "/home/$a" à l'intérieur de la boucle change ton répertoire courant,
     il faut que tu reviennes au répertoire parent en fin de boucle.
    - les tests avec des continue ne simplifient pas la compréhension du script:
     ll vaut mieux inverser le test.
    - les tests [ $a = \* ] et [ $b = \* ] sont inutiles, voire faux:
     - soit $a vaut * parce que le répertoire /home est vide et le test [ -d "$a" ] le traite correctement
     - soit $a vaut * parce /home contient un répertoire nommé *
     (ça peut arriver, les noms de fichiers peuvent contenir des métacaractères)
     et ton script va l'ignorer alors qu'il aurait dû le traiter.
    - si tu veux tester que $b est un fichier le test devrait être -f
     et non -e qui ne teste que l'existence et qui est vrai aussi
     pour un répertoire.
    
    cd /home
    for a in * ; do
     # traiter uniquement les répertoires
     if [ -d "$a" ] ; then
     cd "/home/$a"
     for b in * ; do
     # traiter uniquement les fichiers
     if [ -f "$b" ] ; then
     # TRAITEMENT
     fi
     done
     fi
     cd .. # retour au repertoire /home
    done