シェルスクリプトマガジン

第4回 ファイルサーバーを作る

 3~10行目は、初期値の設定です。「share_folder」(共有フォルダ名)、「readonly_folder」(参照のみの共有フォルダ名)、「setting_file」(Sambaの設定のひな型となるファイル名)、「workgroup」(ワークグループ名)、「user_reg」(ユーザー登録用ファイル名)、「normal_log」(インストール時の正常メッセージ保存用ファイル名)、「error_log」(インストール時のエラーメッセージ保存用ファイル名)は、初期値を格納している変数です。変数の右辺を書きかれれば、好きな名前が使えます。

 13~21行目は、Sambaのインストールです。13行目と14行目でインストールを開始するメッセージを表示します。15行目の「sudo apt-get update」でパッケージ情報を最新にしています。その後に続く、「1>${normal_log}」では正常メッセージを、「2>${error_log}」ではエラーメッセージを、端末上に表示せずにファイルに保存しています。なお、Ubuntuでは、パッケージを操作するコマンドとして「apt」が推奨されていますが、シェルスクリプトで使うと警告が出力されるので古いコマンドの「apt-get」を使っています。

 16行目の「sudo apt-get -y install samba」でSambaをインストールするコマンドです。上の行と同じように正常とエラーのメッセージをそれぞれのファイルに保存していますが、「>>」を指定することで、すでに書き込まれているメッセージを消さずに追記します。

 17~21行目は、エラー処理です。「if」文については、第1回を参照してください。「$?」は、第3回でも利用しましたが、直前に実行したコマンドのステータスを格納している特殊な変数です。「!=」は「以外」の比較演算子です。「$? != 0」でステータスが「0」以外で「真」(True)になります。ステータスが「0」は正常終了なので、エラーときにif文内の処理が実行されます。19行目では、エラーログを見るようにメッセージを表示しています。

  20行目では、「exit」コマンドでシェルスクリプトを終了しています。exitコマンドの引数に終了時のステータスを指定できます。「0」以外の「1」を与えているので、このステータスでシェルスクリプトが正常終了しなかったことが分かります。

 このように、コマンドのエラーをそのまま表示するのではなく、利用者に何が起きたかを伝えるようにするのもプログラミングでは重要です。ただ、最初から意識することは難しいでしょうから、正常処理を記述してうまく動作することが確認できてから、エラー処理を追加しましょう。