Fonctions récursives dans un script shell

05 012012

En cherchant un petit script pour compter des lignes de code dans un dossier, je suis tombé sur la problématique de la récursivité pour parcourir les sous dossiers.
N’étant pas un spécialiste du shell, je ne savais pas qu’on pouvait déclarer des fonctions en shell, donc voici comment faire :

#!/bin/bash

fichierstexte=( html phtml php css js yml );
nbextensions=${#fichierstexte[@]}
nblignes=0
nbfichiers=0

if [ -z "$1" ]
then
    echo "manque argument du dossier"
    exit
fi



recursiveCount() {
    for file in "$1"/*; do
        if [ -f "$file" ]
        then
            extension="${file#*.}"
            for ((i = 0; i < nbextensions; i++)); do
                if [ ${fichierstexte[i]} = $extension ]
                then
                    nb=`wc -l < $file`
                    nblignes=$((nblignes + nb +1))
                    nbfichiers=$((nbfichiers + 1))
                fi
            done

        elif [ -d "$file" ]
        then
            recursiveCount "$file"
        fi
    done
}

recursiveCount $1

echo "nombre de lignes dans $1"
echo "total lignes : $nblignes"
echo "total fichiers : $nbfichiers"

le script produit ce genre de sortie :

julien@julien-desktop:~/Sites$ ./countlines.sh jsproxy/
nombre de lignes dans jsproxy/
total lignes : 8694
total fichiers : 40

à améliorer pour pouvoir passer plus de paramètres comme des dossiers à exclure par exemple.

Cette entrée a été publiée dans Scripts Shell, avec comme mot(s)-clef(s) , , , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>