連載
» 2018年10月31日 05時00分 公開

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

[西村めぐみ,@IT]

条件で使用できる“式”

 「[ -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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。