2011年09月04日

シェルスクリプトの計算速度

職場の新人にシェルスクリプトの課題を出してみた
内容は下の表示例の出力をするシェルスクリプトを作成するというもの

表示例
0 + 1 = 1
1 + 2 = 3
3 + 3 = 6
6 + 4 = 10



4950 + 100 = 5050

というふうに
最終的には100まで足し算をしていくシェルスクリプトだ
最初は10までで作成させようと準備していたんだけど
大量の計算を伴うと
シェルスクリプトの内容で大きく処理速度が左右されることを
新人に教えたかったので100までの計算としてみた

するとやはりシェルスクリプトに不慣れな新人は
結果は表示例と同じなのだが
速度がとても遅い以下のようなスクリプトを組んで提出してきた

#SLOW
#!/bin/bash
tmp=0
for no in {1..100}
do
ans=`expr $tmp + $no`
echo "${tmp} + ${no} = ${ans}"; tmp=$ans
done


新人のスクリプトはたしかに結果は出るが
exprで計算させているのが処理を遅くしている

#FAST
#!/bin/bash
tmp=0
for((i=1; i<=100; i++))
do
let ans+=i
echo "${tmp} + ${i} = ${ans}"; tmp=$ans
done


for文の条件を繰り返し回数の判定のみとし
計算部分は高速なlet関数を使用している
for文の条件部分は新人のスクリプトのものでも
シェルスクリプトの変数は
文字列と数値の区別がない為まったく問題はないが
計算させる為の方法に何を使用してスクリプトを組むかで
計算を苦手とするシェルスクリプトは
かなり速度に差がでるようになる
ここはシェルスクリプトの中で注意が必要な部分だ



同じカテゴリー(ShellScript)の記事画像
シェルスクリプト(計算)
シェルスクリプト(変数内容の表示)
同じカテゴリー(ShellScript)の記事
 シェルスクリプトでcsvを扱う(bash)その2 (2015-06-20 20:30)
 パスワードハッシュ生成スクリプト(Solaris10) (2013-09-29 14:31)
 シェルスクリプトでcsvを扱う(bash)その1 (2012-08-12 12:00)
 シェルスクリプト(計算) (2010-04-17 20:47)
 シェルスクリプト(変数の定義2) (2010-04-06 20:53)
 シェルスクリプト(変数内容の表示) (2010-04-04 21:12)

上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

削除
シェルスクリプトの計算速度
    コメント(0)