web-dev-qa-db-ja.com

シェルスクリプト+数値の合計

kshまたはbashで数値を合計するための最も簡単でエレガントな方法は、letコマンドに関するものですが、すべての数値を要約するためのより良い方法を見つけたいと思います。

例えば

num1=1232
num2=24 
num3=444
.
.
.

let SUM=$num1+num2+num3.........
9
lidia

どうですか:

num1=1232
num2=24 
num3=444
sum=$((num1+num2+num3))
echo $sum # prints 1700
25
codaddict

Ghostdog74に同意します。以前は$(())組み込み関数を使用していましたが、データを受け取る形式があまり「数値形式」ではないため、bcに変更しました。以下を確認してください。

jyzuz@dev:/tmp> echo $(( 017 + 2 ))
17
jyzuz@dev:/tmp> echo $(( 17 + 2 ))
19
jyzuz@dev:/tmp>

最初のケースでは、2進数または16進数として理解されているようです。よくわかりません。

だから私は紀元前に変更しました。あなたはあなたが好む方法を選ぶことができます:

bc << EOF
$num1 + $num2 + $num3
EOF

または

bc <<< "$num1 + $num2 + $num3"

これを行うには他にもクールな方法があります...しかし、除算も実行している場合など、詳細を送信すると、数学ライブラリをロードするためにbc -l引数を追加する必要があります。

3
jyz

二重括弧を外側に移動すると、最後のドル記号を削除し、オペランドと演算子(変数と代入演算子を含む)を自由に配置して読みやすくすることができます。

num1=1232
num2=24 
num3=444
(( sum = num1 + num2 + num3 ))

(( count++ ))

(( sum += quantity ))

letまたは外部の*= /= %= += -= <<= >>= &= ^= |= ++ --フォームを使用しない限り(または変数をインクリメントするか、右側で割り当てを行う場合)、インクリメントスタイル演算子((()))を使用することはできません。 。

$(())構文を使用できますが、10進数がある場合は、awkまたはbc/dcを使用して「移植可能」に計算を行います。

0
ghostdog74