Eyes, JAPAN Blog > シェルスクリプトの限界

シェルスクリプトの限界

Masato Kaneko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

私はサーバ管理やデスクトップ用途などで、ある決まった処理を何度も行いたい場合や、処理を自動化したいといった場合には決まって「シェルスクリプト」を使ってきました。
シェルスクリプトとは、簡単に言ってしまうとプログラムです。
各UNIXコマンドに精通していればそれらを組み合わせて簡単なプログラムを書くことが出来ます。
UNIX好きな人ならばシェルスクリプトは日常的に使っていて、その便利さも良く分かっていることかと思います。

さて、そんなシェルスクリプトですが、私の場合今まで多くの処理を行うのに不自由ないくらい活躍してきました。
しかし、プログラムの規模が大きくなってくると次第にその「限界」に気がついてしまうような気がしました。
今日は私が感じたシェルスクリプトの「限界」について書いてみたいと思います。

サーバにあるログを解析して、解析した結果をメールで管理者宛に送信するようなスクリプトを書いたときでした。
ログの中にはIPアドレスが書かれている部分があり、IPアドレスの部分を抽出してその統計を取るためにある関数を定義しました。
その関数では主にIPアドレス (111.222.333.444の様な整数をピリオドで区切った形式) を処理対象にしていて、最終的な関数終了時にIPアドレスをreturnするようなものにしました。
そして書いたスクリプトを実行してその関数を呼んでみると、以下の様なエラー文が返ってきました。

bash: return: 111.222.333.444: numeric argument required

エラー文を読めば分かるかと思いますが、この場合だとbashになりますがreturn文は整数しか受け付けてくれないようでした。
IPアドレスの形式は先ほど述べたように、整数をピリオドで区切った形式なのでシェルスクリプト内では文字列になります。
いろいろ試してみると、「0.1」のような小数や、配列なども受け付けてくれませんでした。
この問題が発覚してから私は行き詰まってしまいました。
調べてみたところPerlやRuby, Pythonと言ったスクリプト言語だとreturnは整数のみでなく様々な型のものを受け付けてくれるそうです。
小さいことですがこの問題を知って、この処理にはスクリプト言語を使った方が良いのかな、と思ってしまいました。
私はシェルスクリプトはすばらしいと思いますし、実際に色々な場面で使っていますが最近は用途によってはスクリプト言語を使うことも増えてきました。
しかしながらシェルスクリプトはただのプログラムではなく、「小さなものを組み合わせて大きな処理を行う」といったUNIXの哲学が良くあらわれているものなので、それを忘れないためにも今後も使っていきたいと思っています。

担当: 金子 (実はもう少し書きたいことがあったのですが長くなってしまったのでまたの機会に)

Comments are closed.