Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/09/2012, à 20:14

devphp

BASH comptage des lignes de code (spécial Geek)

Bonjour

Voila je m'entreprend a compté les lignes de code, via un script bash.
Mais ça ne fonctionne pas exactement comme je voudrai ^^

J'obtiens au bout de X => ./count: line 5: $FILE: ambiguous redirect


#!/bin/bash
find . -type f -name "*.php" | while read FILE
total=0
do
        count=$(wc -l < $FILE)
        total=$((total + count))
#echo $total
done
echo $total

Si quelqu'un serai m'aider pour mon tout premier bash ça serai bien sympa


Ubuntu 12.04 (Xfce) 64bits
Intel® Core™ i5 CPU M 520 @ 2.40GHz × 4

Priorité à la prévention, faite des back-up fréquent.

Hors ligne

#2 Le 28/09/2012, à 20:22

sputnick

Re : BASH comptage des lignes de code (spécial Geek)

Il faut quoter les variables ! tu peux avoir des fichiers avec des espaces dans leur noms.

http://mywiki.wooledge.org/BashGuide/Practices#Quoting


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#3 Le 28/09/2012, à 20:29

devphp

Re : BASH comptage des lignes de code (spécial Geek)

Seriez-vous corriger mon code, afin que je le comprenne ?


Ubuntu 12.04 (Xfce) 64bits
Intel® Core™ i5 CPU M 520 @ 2.40GHz × 4

Priorité à la prévention, faite des back-up fréquent.

Hors ligne

#4 Le 28/09/2012, à 20:37

Beta Pictoris

Re : BASH comptage des lignes de code (spécial Geek)

#!/bin/bash
total=0
for FILE in $(find . -type f -name "*.php") 
do
        count=$(wc -l < $FILE)
        total=$(($total + $count))
#echo $total
done
echo $total

Hors ligne

#5 Le 28/09/2012, à 20:46

sputnick

Re : BASH comptage des lignes de code (spécial Geek)

devphp a écrit :

Seriez-vous corriger mon code... ?

Non, moi c'est sputnick.

Une solution simple et efficace :

find . -type f -name '*.php' -exec wc -l {} \; | awk '{sum+=$1}END{print sum}'

Dernière modification par sputnick (Le 28/09/2012, à 20:48)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#6 Le 28/09/2012, à 20:47

sputnick

Re : BASH comptage des lignes de code (spécial Geek)

@Beta Pictoris, ton code ne gère pas les espaces dans les noms de fichiers.

Avec find, on utilise while, pas un for.

De plus il faut quoter les variables !

Dernière modification par sputnick (Le 28/09/2012, à 20:48)


On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#7 Le 28/09/2012, à 20:50

devphp

Re : BASH comptage des lignes de code (spécial Geek)

Moi je dis Bravo a vous deux, sputnick pour la ligne de commande magique et Beta Pictoris pour le code simple a comprendre

#!/bin/bash
# Merci a @Beta Pictoris et @sputnick sur http://forum.ubuntu-fr.org/viewtopic.php?pid=10930871#p10930871
total=0
for FILE in $(find . -type f -name "*.php") # cherche les fichiers php dans le dossier courant
do 
        count=$(wc -l < $FILE) # compte ne ombre de ligne du fichier (wc -l) dans '<' FILE 
        total=$(($total+$count)) # Incremente le compteur
echo "$FILE a  $count lignes de code sur $total"
done
echo "Nb lignes $total"

Grace a vous deux; je peux compté en live sur mon site et connaitre via le code de Beta Pictoris dans mon shell

Merci beaucoup

Dernière modification par devphp (Le 28/09/2012, à 20:53)


Ubuntu 12.04 (Xfce) 64bits
Intel® Core™ i5 CPU M 520 @ 2.40GHz × 4

Priorité à la prévention, faite des back-up fréquent.

Hors ligne

#8 Le 28/09/2012, à 20:59

sputnick

Re : BASH comptage des lignes de code (spécial Geek)

C'est pas fini : un problème interessant se pose. Si je corrige ton script :

#!/bin/bash

find . -type f -name "*.php" | while read file; do
    count=$(wc -l < "$file")
    sum=$((sum + count))
done

echo $sum

Cela ne fonctionera pas. C'est parce que le fait de faire un pipe crèe un sous shell, et on utilise alors plus la même variable sum.

Pour y remédier :

#!/bin/bash

while read file; do
    count=$(wc -l < "$file")
    sum=$((sum + count))
done < <(find . -type f -name "*.php")

echo $sum

La forme

< <( )

est un "Process Substitution", voir

man bash | less +/'^ +Process Substitution'

On ne peut pas mettre d'array dans un string!
https://sputnick.fr/

Hors ligne

#9 Le 28/09/2012, à 21:06

devphp

Re : BASH comptage des lignes de code (spécial Geek)

BASH me réserve encore beaucoup de surprise big_smile


Ubuntu 12.04 (Xfce) 64bits
Intel® Core™ i5 CPU M 520 @ 2.40GHz × 4

Priorité à la prévention, faite des back-up fréquent.

Hors ligne

#10 Le 01/10/2012, à 10:59

Totor

Re : BASH comptage des lignes de code (spécial Geek)

sputnick a écrit :

C'est pas fini : un problème interessant se pose.

Salut !

Sans compter que cette solution est "fourre tout" ... elle recense les commentaires, lignes vides et très probablement du code mort...


-- Lucid Lynx --

Hors ligne

#11 Le 01/10/2012, à 15:03

athel

Re : BASH comptage des lignes de code (spécial Geek)

La commande sloccount permet également (entre autre) de compter les lignes dans un projet.

Hors ligne

#12 Le 01/10/2012, à 16:07

HP

Re : BASH comptage des lignes de code (spécial Geek)

Traitement de texte… bash est, et reste, un très mauvais choix…


cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne