●引数の高度な利用法
スクリプト引数のより高度な利用法も紹介しておきましょう。スクリプト内で実行したコマンドの結果を引数として処理できます。この処理には,setコマンドとメタキャラクタ「`」(逆引用符,バッククオート)を利用します。例えば,現時点でだれがログインしているかを出力するコマンドwhoを実行し,その結果を引数として処理してみます(図11[拡大表示])。
ここで,echoコマンドの引数文字列は「"」で囲んであります。これは,文字列中の特殊文字「'」をシェルのメタキャラクタとして処理させないためです。
このスクリプトを実行すると,図12[拡大表示]のような出力となります。ユーザーjunが,コンソールから7月21日午前10時14分にログインしていることが分かります。whoコマンドの実行結果をsetコマンドで引数処理すると5個の引数となります。つまり,実行結果の文字列中の空白文字が区切りになっていることが分かります。
●簡単なシェル・スクリプト例
これまで例示したシェル・スクリプトは,文法を理解するための基本構文が中心でした。最後に,もう少しスクリプトらしい例を示すことにします。
図13[拡大表示]のスクリプトを実行すると,引数で指定したディレクトリ(引数がない場合にはカレント・ディレクトリ)上のファイルのうち,テキスト形式のファイルの名前を出力します。テキスト形式のファイルが存在しない場合には,「存在しません。」のメッセージを出力します。また,コマンド行引数を複数指定する,あるいはディレクトリ以外のパス名を指定する場合には,簡単な使用法またはエラー・メッセージが出力されます。
スクリプト中で実行しているfileおよびgrepコマンドについて簡単に説明します。fileコマンドは引数で指定したファイルのファイル形式を標準出力に出力します。grepコマンドは引数で指定したファイルから文字列を検索します。この例では,echoコマンドとgrepコマンドをパイプで接続しています。
grepコマンドはファイルではなく標準入力を利用するので,ファイル名は「-」となっています。また,検索結果の出力を抑制するために,「-q」オプションを指定して実行します。
ユーザーjunのホーム・ディレクトリ上にあるscreenshotディレクトリを指定した実行結果を図14[拡大表示]に示します。
今回はこれで終わりですが,前述したようにシェル・スクリプトはシステムの運用管理のためによく利用されています。いきなりは無理ですが,ここで説明した基本事項から始めて徐々にステップアップしていくと良いでしょう。