#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.
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)
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
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)
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