LinuCレベル1 Version 4.0 102試験の例題と解説
105.2 簡単なスクリプトのカスタマイズまたは作成
■トピックの概要
このトピックの内容は以下の通りです。
<105.2 簡単なスクリプトのカスタマイズまたは作成>
重要度 4
<説明>
既存のスクリプトをカスタマイズしたり、簡単なBashスクリプトを新規作成できる。
<主要な知識範囲>
・標準的なshの構文(ループ、テスト)を使用する
・コマンド置換を使用する
・コマンドによって返される、成功または失敗を示す戻り値やその他の情報をテストする
・条件に応じて、スーパーユーザにメールを送信する
・先頭行(#!)を利用して、適切なスクリプトインタプリタを選択する
・スクリプトの位置、所有権、実行権、SUID権を管理する
<重要なファイル、用語、ユーティリティ>
・for
・while
・test
・if
・read
・seq
・exec
■例題
シェルスクリプト「testscript」を、以下のように実行する場合に不要な手順を選択してください。
[条件]
* スクリプトはどのユーザでも、必ず/bin/bashで実行する
* 実行方法は以下とする($は一般ユーザーのプロンプト)
[実行方法]
$ testscript
1. スクリプトの先頭行に「#!/bin/bash」を記載する
2. スクリプトファイルに実行権を与える
3. スクリプトのファイル名の拡張子を「.bash」に変更する
4. スクリプトを環境変数$PATHに設定されているパスに配置する
※この例題は実際の試験問題とは異なります。
解答と解説
答えは「3. スクリプトのファイル名の拡張子を「.bash」に変更する」です。
自作のシェルスクリプトは、以下のようにシェルのコマンドを使って実行することができます。
実行例1) $ bash testscript
実行例2) $ bash ./testscirpt
実行例3) $ bash /home/user/testscirpt
ただ、この状態では、スクリプトを実行する場合にbashコマンドを使う必要があります。またカレントディレクトリにファイルが存在しない場合は、パスを指定する必要もあります。
つまり、通常のコマンド実行に比べて不便です。
通常のコマンドの実行方法、つまり例題の実行方法と同じようにスクリプトを実行するためには、以下の手順が必要になります。
a)スクリプトの先頭行に「#!/bin/bash」を記載する
「#!」から始まる行は、シバンやシェバン(she-bang)と呼ばれる行です。この行にはスクリプトを実行するコマンドを指定します。
以下の例では、/bin/bashを指定しています。
例:
---------------------------------------------------------------------------
#!/bin/bash
echo "Hello World!"
exit $?
---------------------------------------------------------------------------
シバンを設定しない場合、多くの場合ログインシェルである/bin/bashを使ってスクリプトが実行されます。しかし環境によって実行シェルが変わります。
今回はスクリプトをどのユーザで実行しても /bin/bash で実行するため、シバンに/bin/bashを記載しています。
なおシバンに/bin/shを指定する場合はシステムによっては、/bin/sh以外のシェルで実行されることがあるため注意が必要です。
b)ファイルに実行権を与える
次にファイルに実行権が必要になります。以下は実行権を与える例です。
例:$ chmod a+x ./testscript
c) プログラムを環境変数$PATHに設定されているパスに配置する
最後に、環境変数$PATHにプログラムが配置されているパスを追加します。
以下の例は、環境変数$PATHに/usr/local/binが含まれている環境を想定しています。
例:
※ $PATHに含まれるパスの確認
$ echo $PATH
/usr/local/bin:/usr/bin
※ スクリプトの移動(この操作にはroot権限が必要です。#はrootユーザーのプロンプト)
# mv ./testscript /usr/local/bin
これらの手順を実施すると、通常のコマンドと同じようにスクリプトを実行できるようになります。
自分で作成したシェルスクリプトは、何度も使うこともあります。使う機会の多いものは、いつでも使えるように適切に設定しておくと便利です。
■例題作成者 株式会社デージーネット ソリューション開発部 森 彰吾 氏