「i = i + 1」は理解できます。そして同様に、「i=`expr $i + 1`」の構造も理解できます。構造は。
問題はexprコマンド。
というのも、僕がテキストとして使用している『シェルスクリプトポケットリファレンス』では、「exprコマンドは、「与えられた文字列の中に、与えられた正規表現にマッチする部分があるかどうか」をチェックするコマンド」であり、また「文字列の中から、正規表現にマッチした部分を抜き出す」ものとしてのみ説明されていたから。
だとしたら、expr $i + 1とは何を意味しているのか?これがわからないわけです。
そこでexprコマンドについてgoogle先生に尋ねたところ、その第一の役割は「【 expr 】コマンド――計算式や論理式を評価する」ということなんだそう(そして第二の役割が正規表現のチェック)。
例えばリンク先にもある通り、
$ expr 100 + 20
120
と返されます。つまり基本は計算を行うコマンドってことなんですね。
そして四則演算はもちろん、比較演算を行うこともできます。
$ expr 100 \< 20
0
比較の結果が偽なので0が返されました。
比較演算子はエスケープ(\)が必要とか、演算子はくっつけてはいけない(100と+と20との間にはスペースが入る)とか、細かな制限はあるようですがそれは必要に応じておいおい知っていくことにして・・・。
これで「i=`expr $i + 1`」のしくみ(意味)がわかりました。
$iに+1することで$iをインクリメントできるということだったんですね!スッキリ(^ ^)