Archives par mot-clef : unix

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.

Publié dans Scripts Shell | Marqué avec , , , , | Laisser un commentaire