開発
シェルスクリプトの限界
Masato Kaneko
サーバにあるログを解析して、解析した結果をメールで管理者宛に送信するようなスクリプトを書いたときでした。
ログの中には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の哲学が良くあらわれているものなので、それを忘れないためにも今後も使っていきたいと思っています。
担当: 金子 (実はもう少し書きたいことがあったのですが長くなってしまったのでまたの機会に)