前回に引き続いて,Linuxを操作するときに大きな役割を果たす「シェル」について説明します。前回は,シェル・スクリプトを用いてプログラミングをするときの基礎的な事項を取り上げました。今回はシェルの基本的な構文について紹介します。

testコマンド

 基本構文を紹介する前に,条件判定を行うtestコマンドを紹介します。testコマンド(図1)は,後で紹介するif文やcase文などの条件分岐,for文やwhile文での繰り返し条件判定などに使われます

test 条件式
図1●testコマンドの書式

 このtestコマンドは,指定された条件式を判定し,成立していれば真を,成立していなければ偽を返します。戻り値は$?という特殊な変数に格納されます。例えば,図2のようにして,ファイルがあるかどうかを判定してみましょう。


$ test -f hello      ← helloファイルがあるかどうか判定
$ echo $?	            ← 戻り値を表示
0	            ← ファイルはあったので0
$ test -f chao	   ← chaoファイルがあるかどうか判定
$ echo $?	            ← 戻り値を表示
1		   ← ファイルがなかったので1
図2●testコマンドの実行例

変数$?には,真なら0,偽なら1(0以外の値)が格納されます。代表的な条件式を表1にまとめます。

表1●testコマンドで利用できる主な条件式
条件式 意味
-f ファイル 通常のファイルがあれば真(File)
-d ディレクトリ ディレクトリがあれば真(Directory)
-r ファイル ファイルが存在し,かつ読み込み可能であれば真(Readable)
-w ファイル ファイルが存在し,かつ書き込み可能であれば真(Writable)
-x ファイル ファイルが存在し,かつ実行可能であれば真(eXecutable)
-s ファイル サイズが0以上のファイルがあれば真(Size)
数値1 -eq 数値2 数値1と数値2が等しければ真(EQual)
数値1 -ge 数値2 数値1が数値2より大きい,もしくは等しければ真(Greater or Equal)
数値1 -gt 数値2 数値1が数値2より大きければ真(Greater Than)
数値1 -le 数値2 数値1が数値2より小さい,もしくは等しければ真(Less or Equal)
数値1 -lt 数値2 数値1が数値2より小さければ真(Less Than)
数値1 -ne 数値2 数値1と数値2が等しくなければ真(Not Equal)
文字列 文字列の長さが0以上であれば真
-n 文字列 文字列の長さが0以上であれば真(Not zero)
-z 文字列 文字列の長さが0であれば真(Zero)
文字列1 = 文字列2 2つの文字列が等しければ真
文字列1 != 文字列2 2つの文字列が等しくなければ真
条件式1 -a 条件式2 2つの条件式両方が真であれば真(And)
条件式1 -o 条件式2 2つの条件式いずれかが真であれば真(Or)

表1に示した( )内の英語と照らし合わせると,条件式の記号の意味が理解しやすいかと思います。例えば,条件式「数値1 -gt 数値2」のgtは,Greater Thanの略語になるわけです。

 なお,条件判定にはもう一つ書式があり,実際にはこちらの書式の方が一般的です(図3)。

[ 条件式 ]
図3●[ ]コマンドの書式その2

「test -f hello」は「[ -f hello ]」と全く同じ意味になります。「[]」を用いた書式の方が短くて済みますが,[の直後と]の直前には必ずスペースを入れなければならないので注意してください。