シェルスクリプトに挑戦しよう(8)条件の書き方:“応用力”をつけるためのLinux再入門(28)(2/3 ページ)
「[ -f abc ]」のような書き方は、一般に「条件式」と呼ばれています。主な条件式には以下のようなものがあります。全てtestコマンドのオプションなので、「man」コマンドを使い、「man test」で詳細を確認できます。
●ファイルの判定
式 |
TRUEになる条件 |
-e ファイル名 |
ファイルが存在するとき |
-f ファイル名 |
ファイルが通常のファイルのとき |
-d ファイル名 |
ディレクトリのとき |
-s ファイル名 |
ファイルの長さが0ではない(ファイルが空ではない)とき |
-L ファイル名 |
ファイルがシンボリックリンクのとき |
-h ファイル名 |
ファイルがシンボリックリンクのとき(「-L」と同じ) |
ファイル1 -ef ファイル2 |
ファイル1がファイル2のハードリンクのとき |
|
●ファイル属性の判定
式 |
TRUEになる条件 |
-r ファイル名 |
ファイルが存在し、読み出しの権限がユーザーにあるとき |
-w ファイル名 |
ファイルが存在し、書き込み権限がユーザーにあるとき |
-x ファイル名 |
ファイルが存在し、ファイルの実行権限がユーザーにあるとき |
-O ファイル名 |
ファイルの実体の所有者が実効ユーザーIDと同じとき(※2) |
-G ファイル名 |
ファイルの実体の所属グループが実効グループIDと同じとき |
-u ファイル名 |
ファイルの実体にsetuidビットが立っているとき |
-g ファイル名 |
ファイルの実体にsetgidビットが立っているとき |
-k ファイル名 |
ファイルの実体にstickyビットが立っているとき |
ファイル1 -nt ファイル2 |
ファイル1の修正時刻がファイル2の修正時刻より新しいとき |
ファイル1 -ot ファイル2 |
ファイル1の修正時刻がファイル2の修正時刻より古いとき |
|
【※2】「実効ユーザーID(euid)」は、プログラムが動作するときの権限。プログラムを起動したユーザーのID(実ユーザーID、ruid)と等しいことが多い。
●標準入出力の判定
式 |
TRUEになる条件 |
-t 0 |
標準入力が端末 |
-t 1 |
標準出力が端末 |
-t 2 |
標準エラー出力が端末 |
-t 数値 |
数値番目のファイルディスクリプターが端末 |
|
●文字列の判定
式 |
TRUEになる条件 |
文字列1 = 文字列2 |
文字列1と文字列2が等しいとき |
文字列1 != 文字列2 |
文字列1と文字列2が等しくないとき |
-z 文字列1 |
文字列1の長さが0のとき |
-n 文字列1 |
文字列1の長さが0ではないとき |
|
●整数の判定
式 |
TRUEになる条件 |
数値1 -eq 数値2 |
数値1と数値2が等しいとき(equal) |
数値1 -ne 数値2 |
数値1と数値2が等しくないとき(not equal) |
数値1 -gt 数値2 |
数値1が数値2より大きいとき(greater than) |
数値1 -ge 数値2 |
数値1が数値2より大きいか等しいとき(greater or equal) |
数値1 -lt 数値2 |
数値1が数値2より小さいとき(lesser than) |
数値1 -le 数値2 |
数値1が数値2より小さいか等しいとき(lesser or equal)) |
|
●その他(条件の組み合わせなど)
式 |
TRUEになる条件 |
-o オプション |
シェルオプションが定義されていた(※3) |
-v 変数名 |
変数が定義されていた(※3) |
! 条件式 |
条件式が偽のとき(not) |
条件式1 -a 条件式2 |
条件式1と条件式2がどちらも真のとき(and) |
条件式1 -o 条件式2 |
条件式1と条件式2のどちらかが真のとき(or) |
( 条件式 ) |
()の中を優先して評価する(※4) |
TRUE |
常に真 |
FALSE |
常に偽 |
|
【※3】「-o」と「-v」は「/bin/test」では使用できない(-vはbashバージョン4.2以降)。シェルオプションについては連載『Linux基本コマンドTips』の「set」コマンドを参照。
【※4】「(」「)」を使用する際はバックスラッシュなどでエスケープする必要がある。
Copyright © ITmedia, Inc. All Rights Reserved.