最終更新日 2005/04/07
シェルスクリプト
シェルスクリプトとは
シェルスクリプトの書式
シェルスクリプトの実行
シェルスクリプト内の変数
シェルスクリプトの特殊変数
条件分岐(if文)
test文シェルスクリプトとは
シェルスクリプトとは、コマンドラインで実行する一連のコマンドをファイルを書き出し、逐次実行するものです。bashなどのシェルに組み込まれているインタプリタが一行一行順に実行してくれます。
また、条件分岐や繰り返しなどの機能がある為、簡単なプログラムを組むことができます。
シェルスクリプトの書式
シェルスクリプトを書く場合の決まり事は、他のプログラム言語とくらべて非常に少ないです。インタプリタのパスの指定ぐらいになります。基本的には、コマンドの羅列になります。 シェルスクリプトの例(bash)
#/bin/sh echo "Hello shellscprit" echo "Hello GNU/Linux" |
- インタプリタのパスを指定
- echoコマンドを使用して、引数の文字列を表示
- echoコマンドを使用して、引数の文字列を表示
シェルスクリプトの実行
作成したシェルスクリプトを実行する方法は三通りあります。- 「bash」コマンドを使用して実行
書式 bash スクリプトファイル名
オプション -v コメント行も含め、エコー表示しながら実行
-x 実行分のみをエコー表示しながら実行
- 「source」または「.」(ドット)コマンドを使用して実行
書式 source スクリプトファイル名
.(ドット) スクリプトファイル名
- ファイルに実行権をつけて実行
実行方法
#chmod +x スクリプトファイル名
#./スクリプトファイル名
シェルスクリプト内の変数
シェルスクリプト内で変数を定義することができる。構文 変数名=代入する値
例
[root@host /root]# VAR=test
[root@host /root]# echo $VAR
test
シェルスクリプトの特殊変数
シェルスクリプトでは、よく引数を利用する。そのために引数のための特殊な変数が用意されている| 変数名 | 説明 |
| $0 | スクリプトファイル名 |
| $1 | 1番目の引数名 |
| $2 | 2番目の引数名 |
| ${10} | 10番目の引数名 |
| $# | 引数の数 |
| #@ | すべての引数名 |
| $$ | プロセスID |
条件分岐(if分)
条件分岐は「if」を使用する。「if」「else」を用いて条件分岐を行うまた、「if」文のブロックはは「fi」で終了する。
構文
|
if 条件 then 実行文(条件文が真0の時) else 実行文(条件文が偽0以外の時) fi |
|
#!/bin/sh if cd $1 then echo "cd OK!" else echo "cd Erorr" fi |
test文
if文を用いた条件判断には、よくtest文が用いられる。test文を利用すると、簡単にファイルの存在等と確認し、if文などの条件分岐に利用することが可能になる
構文 if test 条件
構文2 if [ 条件 ]
test文の条件判定(ファイル編)
| 条件式 | 実行結果 |
| -e ファイル名 | ファイルが存在すれば真 |
| -f ファイル名 | ファイルが普通のファイルであれば真 |
| -d ファイル名 | ファイルがディレクトリであれば真 |
| -x ファイル名 | ファイルに実行権がついていれば真 |
| -r ファイル名 | ファイルが読み込み可能であれば真 |
| -w ファイル名 | ファイルが書き込み可能であれば真 |
| -L ファイル名 | ファイルがシンボリックリンクであれば真 |
| -s ファイル名 | ファイルサイズが0でなければ真 |
test文の条件判定(文字列編)
| 条件式 | 実行結果 |
| -x 文字列 | 文字列が空(0)であれば真 |
| -n 文字列 | 文字列が空(0)でなければ真 |
| 文字列1=文字列2 | 文字列1と文字列2が等しければ真 |
test文の条件判定(論理演算編)
| 条件式 | 実行結果 |
| !条件 | ファイルが存在すれば真 |
| 条件1 -a 条件2 | 条件1と条件2が共に真であれば真 |
| 条件1 -o 条件2 | 条件1と条件2のどちらかが真であれば真 |
test文の条件判定(数値編)
| 条件式 | 実行結果 |
| 数値1 -eq 数値2 | 数値1と数値2が等しければ真 |
| 数値1 -ne 数値2 | 数値1と数値2が異なれば真 |
| 数値1 -gt 数値2 | 数値1が数値2より大きければ真 |
| 数値1 -ge 数値2 | 数値1が数値2以上であれば真 |
| 数値1 -lt 数値2 | 数値1が数値2より小さければ真 |
| 数値1 -le 数値2 | 数値1が数値2以下であれば真 |
if文とtest文と組み合わせ例
if [ -f "$1"] then echo "OK!" else |