検索
連載

シェルスクリプトに挑戦しよう(8)条件の書き方“応用力”をつけるためのLinux再入門(28)(1/3 ページ)

シェルスクリプトの中では、さまざまな条件を指定して使います。今回は、if文での書き方を中心に「条件」の書き方を解説します。また、スクリプトで問題になりやすい「変数の引用符」についても取り上げます。

Share
Tweet
LINE
Hatena
「“応用力”をつけるためのLinux再入門」のインデックス

“応用力”をつけるためのLinux再入門

条件の書き方

 シェルスクリプトの中では、さまざまな「条件」を指定して使います。この“条件”とは、基本的に“コマンドの実行結果”になります。

 例えば、「if コマンドA then コマンドB else コマンドC fi」のような場合は、コマンドAの実行結果がTRUE(成功)だったらコマンドBが実行され、FALSE(失敗)だったらコマンドCが実行されます。

●条件判定に使われるtestコマンド

 ファイルの有無や属性、変数の内容などによって判定したい場合は、「test」コマンドを使います。

 例えば、「ファイルabcが存在するかどうか」は「test -f "abc"」となります。この場合、abcという名前のファイルが存在した場合、結果はTRUEになります。同様に、「変数VARの内容がxyzかどうか」は「test "$VAR" = "xyz"」で調べることができます。ここで使用している「-f」や「"abc"」、あるいは「=」は、それぞれがtestコマンドの引数なので、空白で区切る必要があります。

●testコマンドを試すには?

 testコマンドの実行結果はTRUEかFALSEという値、具体的には「0」か「1」という数値がシェルに返されるだけなので、コマンドラインで実行しても結果を見ることができません。

 if文で使うと「0」はTRUE、それ以外はFALSEとして扱われるので、スクリプトの中で試すことができます(※1)。

【※1】シェルスクリプトを作らずに試してみたい場合は、連載『Linux基本コマンドTip』の「test」コマンド(基礎編)を参照。



 例えば、以下のスクリプトでは、変数LANG(使用する言語が設定されている環境変数)が「C」だった場合はTRUE、それ以外の場合はFALSEに続けて、LANGの内容を出力しています。

#! /bin/bash
if test "$LANG" = "C"
then 
  echo "TRUE"
else
  echo "FALSE $LANG"
fi
▲testコマンドの動作を試す(testlang)
$ chmod +x testlang
$ ./testlang
FALSE ja_JP.utf8	#←  LANGの内容がCではないのでFALSEが表示された
$ LANG=C ./testlang	#環境変数LANGにCをセットしてtestlangを実行
TRUE			#←  LANGがCなのでTRUEが表示された
▲実行結果(testlang)

testコマンドの省略表記

 testコマンドは、省略して「[ ]」記号で表現できます。これは、testコマンドと同等の働きを持つ「[」コマンドで実現されています。testコマンドと「[」コマンドの違いは、「[」コマンドは最後の引数として「]」が必要という点です。

 例えば、「test -f abc」ならば「[ -f abc ]」、「test "$LANG" = "C"」ならば「[ "$LANG" = "C" ]」となります。

 「-f」や「=」などが、それぞれ「[」コマンドの引数であるという点は、testコマンドと同じです。従って、条件を「[ ]」で書く場合も、空白は省略できません。

 以下は、先ほどの「testlang」スクリプトを「[ ]」記号で書き換えています。実行結果は同じです。

#! /bin/bash
if [ "$LANG" = "C" ]		#←  「if test $LANG = C」を「[」コマンドで書き換えた
then 
  echo "TRUE"
else
  echo "FALSE $LANG"
fi
▲testコマンドを「[ ]」で表記する(testlangを加工)

Copyright © ITmedia, Inc. All Rights Reserved.

       | 次のページへ
ページトップに戻る