シェルスクリプトで変数をインクリメントする

『シェルスクリプトポケットリファレンス』でシェルスクリプトをポツポツ勉強しているのは、シェルスクリプトでやりたいことがあるから。
それは、ディレクトリ内のファイルのファイル名に連番を付記する、というもの。
例えばディレクトリ内に

aaa、bbb、ccc、ddd、eee

という5つのファイルがあったとき、これを

aaa1、bbb2、ccc3、ddd4、eee5

というふうにしたい(本当はもう少し入り組んだ処理をしたい)のです。

そのために

  1. ファイルを読み込む
    for $hensu in `ls directory`; do
  2. 連番を作る
    for $renban in $saisho $saigo; do

という二つの処理を経て、最終的に

mv $hensu $hensu$renban

で行けると考えました。
が、この二つの構文を入れ子にしてしまうと

aaa1、aaa2、aaa3、aaa4、aaa5、bbb1、bbb2、bbb3・・・

というふうに、全てのファイル+全ての連番の組み合わせでファイルが作成されることに・・・。まぁ落ち着いて考えれば、そりゃそうですよね(笑)

手持ちのポケットリファレンスでは解決できそうになかったので、google先生にシェルスクリプトで連番を生成する方法を尋ねたところ、こういう回答が得られました。

今回のパターンなら、

で当初の目的である

aaa1、bbb2、ccc3、ddd4、eee5

が取り出せました。
参照先によれば、saisho++というC言語的記述も使えることもわかりましたが、その際にはこれを(( ))で括らないといけないんだそう。
それを知らずに普通にsaisho++だけ記述していたので構文エラーが返されてました(そのため、こういう表記はできないものだと思い込んでました)。
ただ、exprを使った方がより確実らしいそう。一つ勉強になりました。

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)