Je souhaite accumuler la taille de ligne d'un certain nombre de fichiers contenus dans un dossier. J'ai écrit le script suivant:
let a=0
let num=0
for i in folder/*
do
num=`cat $i | wc -l`
a=$a+$num
done
echo $a
Ce que j'obtiens à la fin du script est 123 + 234 + 432 + ... et non le résultat de l'opération arithmétique d'addition.
Votre syntaxe d'évaluation arithmétique est incorrecte. Utilisez l'une des méthodes suivantes (la première est extrêmement portable mais lente, la seconde est POSIX et portable, sauf pour le Bourne Shell et les versions antérieures du Almquist Shell, les trois dernières nécessitent ksh
, bash
ou zsh
):
a=`expr "$a" + "$num"`
a=$(($a+$num))
((a=a+num))
let a=a+num
((a+=num))
Ou vous pouvez simplement ignorer toute la boucle for
et faire simplement:
wc -l folder/*
Ou, si vous ne voulez que le total:
cat folder/* | wc -l
Ou avec zsh et son mult_ios
option:
wc -l < folder/*
vous pouvez également utiliser ce code
a=`expr $a + $num`
echo $a
et ASSUREZ-VOUS QU'IL YA IS UN ESPACE DES DEUX CÔTÉS DE + DANS "$ a + $ num"
Vous pouvez d'abord déclarer le type de variable:
declare -i a=0
declare -i num=0
La réponse doit spécifier dans quel Shell le code est valide. Par exemple, dans le Bourne Shell (sh
), seules les instructions suivantes sont valides:
a=$((a+num))
a=$(($a+$num))
tandis que les autres possibilités listées par @manatwork peuvent être valables dans bourne à nouveau Shell (bash
)
Désolé, l'édition précédente concernait un autre article. Ici, juste une petite modification du script original:
soit a = 0 soit num = 0 pour i dans le dossier /* do num = `cat $ i | wc -l` a = $ (echo $ a + $ num | bc) fait echo $ a