シェルのif文の条件式

さっきのvimと同様、自分用のシェルメモ
シェルのif文で使う、if [ -e filename ]; thenとかの
[]はtestコマンド。
条件文に使える奴は以下の通り。
ファイル形式のテスト

意味
-b file file が存在し、ブロックスペシャルファイルであれば真。
-c file file が存在し、キャラクスペシャルファイルであれば真。
-d file file が存在し、ディレクトリであれば真。
-f file file が存在し、通常ファイル (regular file) であれば真。
-h file または -L file file が存在し、シンボリックリンクであれば真。
-p file file が存在し、名前付きパイプ (named pipe) であれば真。
-S file file が存在し、ソケットであれば真。
-t [fd] fd が端末でオープンされていれば真。 fd が省略された場合のデフォルト値は 1 (標準出力)。

ファイルのパーミッションのテスト

意味
-g file file が存在し、set GID されていれば真。
-k file file が存在し、 sticky ビットが立っていれば真。
-r file file が存在し、読み取り可能であれば真。
-u file file が存在し、 set SUID されていれば真。
-w file file が存在し、書き込み可能であれば真。
-x file file が存在し、実行可能であれば真。
-O file file が存在し、現在の実効ユーザー id による所有であれば真。
-G file file が存在し、現在の実効グループ id による所有であれば真。

ファイル特性のテスト

意味
-e file file が存在すれば真。
-s file file が存在し、サイズが 0 より大きければ真。
file1 -nt file2 file1 が file2 より (修正時刻で比較して) 新しければ真。
file1 -ot file2 file1 が file2 より古ければ真。
file1 -ef file2 file1 と file2 のデバイス番号と i-ノード番号が共に等しければ真。

文字列のテスト

意味
string または -n string string の長さが 0 より大きければ真。
-z string string の長さが 0 であれば真。
string1 = string2 二つの文字列が等しければ真。
string1 != string2 二つの文字列が等しくなければ真。

数値のテスト

  • l stringで、stringの長さを以下のargに当てはめられる
意味
arg1 -eq arg2 に等しい
arg1 -ne arg2 に等しくない
arg1 -lt arg2 より小さい
arg1 -le arg2 より小さいか等しい
arg1 -gt arg2 より大きい
arg1 -ge arg2 より大きいか等しい

テストの論理結合

意味
! expr expr が偽であれば真。
expr1 -a expr2 expr1 と expr2 の両方が真であれば真。
expr1 -o expr2 expr1 か expr2 のどちらかが真であれば真。

if文は良く使うけど毎回わすれるので。
man testで解説。
というか今回のメモはそれのコピペ