◆ シェルスクリプトとは
シェルスクリプトとは、スクリプト(特定の処理を行うために作成したプログラム)をシェルプログラムで
記述したものです。このシェルスクリプトを使用することで一連のコマンドライン作業を自動化することも
できます。シェルスクリプトを記述するためには1行目に実行するシェルを宣言します。例えば、作成した
スクリプトが bashならスクリプト1行目で以下を指定します。結果、スクリプトはbashシェルで実行される。
※ 例えば、cshシェルでスクリプトを実行したい場合 #!/bin/csh のように指定します。つまり実行するシェルを記述します。
最近のディストリビューションでは /bin/sh は /bin/bash のシンボリックリンクになっていることが多い
ので、以下の記述は/bin/bashと同様にスクリプトはbashシェルで実行されます。※ ls -l /bin/shで確認。
シェルスクリプトと言っても vi コマンドでテキストファイルに実行したいコマンドを記述する事で作成
できます。以下は、lsコマンド、pwdコマンド、psコマンドを順次実行するように作成した「test.sh」
というファイル名のスクリプトファイルです。以下では、catコマンドでファイル内容を表示しています。
$ cat test.sh
#!/bin/bash
ls
pwd
ps
|
関数でも同様のことができるがその違いは何か。関数とシェルスクリプトはどちらも定義した一連のコマンド
を自動実行することができますが、シェルスクリプトの方が機能が豊富であり、長くて複雑な処理を行う場合
関数よりシェルスクリプトの方が適しています。それでは以降はシェルスクリプトの詳細を見ていきましょう。
◆ シェルスクリプトの実行コマンド - 4種類
スクリプトファイルを実行するコマンドとしてbashシェルにはsourceコマンドやbashコマンドがあります。
例えばtesting.shスクリプトファイルを作成し、これを実行するためには以下の通りコマンドを実行します。
これらのコマンドは省略してスクリプトファイルの前に「 . 」と入力してスクリプトを実行することも可能。
以下のようにchmodコマンドでファイルに実行権を与えた場合はsourceコマンドやbashコマンドなどを
使用することなく、スクリプトファイル名を入力するだけで実行できます。※ なお、定義されている変数
PATHに、実行するスクリプトファイルのディレクトリが含まれていない場合(パスが通っていない場合)
シェルスクリプト実行時にカレントディレクトリのスクリプトを実行するために ./ を入力する必要がある。
$ chmod a+x test.sh
$ ./testing.sh
|
◆ シェルスクリプトの特殊変数
シェルスクリプトにおいても、bashでは以下のような特殊な変数を用いて引数を参照することができます。
変数名 |
説明 |
$0 |
シェルスクリプトファイル名 |
$1 |
1番目の引数。※ 2番目の引数の場合は $2 と指定する。 |
$$ |
現在のシェルのプロセス番号 |
$# |
コマンドラインに与えられた引数の数 |
$? |
シェルが最後に実行したコマンドの終了ステータス ( 0 = 正常終了、1 = 異常終了、それ以外はエラー ) |
$@ |
全ての引数 ( 区切りはスペース ) |
$* |
全ての引数 ( 区切りは環境変数IFSで指定したもの ) |
変数を理解するために、特殊変数の内容を表示するシェルスクリプトを作成し、それを実行してみましょう。
先ずテキストファイルに以下内容の「 test.sh 」というスクリプトファイルを作成て、次にそのスクリプトを
実行する際に「LinuC」と「CCNA」という引数を追加した上で実行してみます。その結果が以下となります。
$ cat test.sh
#!/bin/bash
echo "現在実行中のスクリプトファイルは $0 です"
echo "1番目の引数は $1 です"
echo "2番目の引数は $2 です"
echo "引数の数は $# です"
echo "このスクリプトのプロセス番号は $$ です"
|
$ ./test.sh LinuC CCNA
現在実行中のスクリプトファイルは ./test.sh です
1番目の引数は LinuC です
2番目の引数は CCNA です
引数の数は 2 です
このスクリプトのプロセス番号は 2015 です
|
上記のシェルスクリプトの実行後 echo $? と実行すると 0 を戻しているので testsh のスクリプトが正常終了したことが分かります。
|