シェルの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で解説。
というか今回のメモはそれのコピペ