
フォルダに含まれる複数のファイルの行サイズを累積したいと思います。私は次のスクリプトを書いた。
let a=0
let num=0
for i in folder/*
do
num=`cat $i | wc -l`
a=$a+$num
done
echo $a
スクリプトの最後で得られるのは、加算算術演算の結果ではなく、123+234+432+...です。
答え1
算術評価の構文が正しくありません。次のいずれかを使用してください(最初のものは非常に移植性がありますが遅く、2番目はBourneシェルとAlmquistシェルの初期バージョンを除いてPOSIXであり、移植可能であり、最後の3つは必須ですksh
)。bash
zsh
a=`expr "$a" + "$num"`
a=$(($a+$num))
((a=a+num))
let a=a+num
((a+=num))
または、ループfor
全体をスキップして次のことを実行できます。
wc -l folder/*
または合計のみを希望する場合:
cat folder/* | wc -l
または、zshとそのmult_ios
オプションを使用してください。
wc -l < folder/*
答え2
このコードを使用することもできます
a=`expr $a + $num`
echo $a
そして「$a + $num」で、+両側にスペースがあることを確認してください。
答え3
答えを指定する必要があります。どの殻コードが動作します。たとえば、Bourne Shell( sh
) では、次のガイドラインのみが有効です。
a=$((a+num))
a=$(($a+$num))
@manatworkによってリストされた他の可能性は、Bourneでも機能します。再びシェル( bash
)
答え4
申し訳ありません。以前の修正は他の投稿に関するものでした。以下は、元のスクリプトを少し変更したものです。
a = 0としましょう 数字= 0にしてください i/* フォルダの場合 する num=`cat$i|トイレ-l` a=$(エコ $a+$num|bc) 完璧 $ aをエコー