シェルスクリプトの条件判断のtestコマンドについて1

組み込みコマンドのtestはシェルスクリプトにおいて各種条件判断を行う機能を有します。

testコマンドを活用することにより、他言語にある条件分岐のif文や繰り返しのwhile文をシェルスクリプトでも利用する事ができるようになります。


testコマンドはif文やwhile文に組み込まず、単体でも実行する事ができるので、今回はtestコマンド単体の動作を見ていきます。




任意のファイルが存在するか?を確認します。

ディレクトリが下記の場合に、hello.txtがあるか?を確認してみます。

.
├── hello.txt
└── workspace

testコマンドでは、条件式の評価結果(今回であればファイルが存在するか?)が真であれば終了ステータスを「0」になり、偽であれば終了ステータスは「1」になります。


ファイルの有無はtestに-eのオプションをつければ確認できます。

自作のLinuxコマンドでオプションを追加しよう


$ test -e hello.txt

実行後の出力は

 

で何も表示されません。


今回はhello.txtが存在するので、評価結果は「0」になるはずですが、値は終了ステータスというものなので、終了ステータスを格納する特殊パラメータの $? に評価結果が格納されることになります。

$ test -e hello.txt
$ echo $?
0

評価結果「0」が出力されました。


testコマンドの確認のために、存在しないファイルの有無も確認してみます。

$ test -e world.txt
$ echo $?
1

終了ステータス「1」が出力されました。




任意のパスがディレクトリであるか?をtestコマンドで確認してみます。

ディレクトリであるか?のオプションは-dになります。

$ test -d workspace
$ echo $?
0

workspaceはディレクトリになりますので、終了ステータスは「0」になります。


$ test -d hello.txt
$ echo $?
1

hello.txtはディレクトリでないので、終了ステータスは「1」になります。




testコマンドでは数値の比較も行うことができます。

オプションの-ltで、左の数値と右の数値を比較して左の数字が小さければ真になります。

$ test 1 -lt 2
$ echo $?
0
$ test 2 -lt 1
$ echo $?
1

オプションの-gtで、左の数値と右の数値を比較して左の数字が小さければ真になります。

$ test 1 -gt 2
$ echo $?
1
$ test 2 -gt 1
$ echo $?
0

他に-leで左の数値が右の数値以下であれば真、-geで左の数値が右の数値以上であれば真といったオプションもあります。




testコマンドには他にも文字列比較やファイル権限の確認等のオプションもあり、様々なものを評価できます。

testのオプションは下記のページ等でご確認ください。

【 test 】コマンド(基礎編)――ファイルの有無などを判定する:Linux基本コマンドTips(221) - @IT

マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。