labunix's blog

labunixのラボUnix

bashのfor文で初期値、ループ条件、ループ処理を指定してみる。

■bashのfor文で初期値、ループ条件、ループ処理を指定してみる。
 以下の続き。

 100までの総和を求める計算回数とシェル芸について
 http://labunix.hateblo.jp/entry/20150417/1429275149

■ガウスの解法とかの公式を使ってはいけない制限です。

 bashとclispとawkで小学三年生レベルの等差数列の総和
 http://d.hatena.ne.jp/labunix/20130114

■更に以下のよくある擬似言語で表現できるように制限すると、
 bashでも「初期値、ループ条件、ループ処理を指定する」で計算回数を1回増やす事ができます。
 ※日常書くスクリプトでわざわざそんなことをする人は少ないと思いますが。。。

 ・ 0 -> 合計 \
 ■ (0 ->;<101;数++;)
 | ▲  \
 | | 合計 + 数 -> 合計 \
 | ▼ 
 ■
 ・ return 合計

$ total=0; \
  for ((n=0;n<101;n++));do \
    total=$(($total+$n)); \
  done; \
  echo $total
5050

■grepの結果をwcに渡して数えることをしなくても、
 検索結果をカウントする方法でも良い。

$ echo 'total=0;for ((n=1;n<101;n++));do total=$(($total+$n));done' | \
  /bin/bash -x 2>&1 | awk '/ total=/ {sum++};END{print sum}'
101

$ echo 'total=0;for ((n=0;n<101;n++));do total=$(($total+$n));done' | \
  /bin/bash -x 2>&1 | awk '/ total=/ {sum++};END{print sum}'
102