条件式では,数値比較,文字列比較,ファイル属性,論理演算子および三項演算子を使用します。条件式の共通仕様を説明します。
letコマンドの引数にtestコマンドの引数(-eqなど)を指定した場合,letコマンドは変数と解釈して動作します。
[[]]を使用して条件判定するときの使用例を次に示します。
if [[ $arg1 -eq $args ]]; then |
(1) 数値比較
数値の比較に使用する演算子を次の表に示します。
表5-21 数値の比較に使用する演算子
演算子を用いた条件式 | 判定 | testコマンドまたは[[]]での使用可否 | letコマンドまたは(())での使用可否 |
---|---|---|---|
数値1 -eq 数値2 | 数値1と数値2が等しい場合は真。 | ○ | × |
数値1 -ne 数値2 | 数値1と数値2が等しくない場合は真。 | ○ | × |
数値1 -ge 数値2 | 数値1が数値2以上の場合は真。 | ○ | × |
数値1 -gt 数値2 | 数値1が数値2より大きい場合は真。 | ○ | × |
数値1 -le 数値2 | 数値1が数値2以下の場合は真。 | ○ | × |
数値1 -lt 数値2 | 数値1が数値2より小さい場合は真。 | ○ | × |
数値1 == 数値2 | 数値1と数値2が等しい場合は真。 | ○※1 | ○ |
数値1 != 数値2 | 数値1と数値2が等しくない場合は真。 | ○※1 | ○ |
数値1 >= 数値2 | 数値1が数値2以上の場合は真。 | × | ○ |
数値1 > 数値2 | 数値1が数値2より大きい場合は真。 | ○※1※2 | ○ |
数値1 < 数値2 | 数値1が数値2より小さい場合は真。 | ○※1※2 | ○ |
数値1 <= 数値2 | 数値1が数値2以下の場合は真。 | × | ○ |
数値比較の使用例を次に示します。
a=1 |
(2) 文字列比較
文字列の比較に使用する演算子を次の表に示します。
表5-22 文字列の比較に使用する演算子
演算子を用いた条件式 | 判定 | testコマンドまたは[[]]での使用可否 | letコマンドまたは(())での使用可否 |
---|---|---|---|
-n 文字列 | 文字列の長さが1文字以上の場合は真。 | ○ | × |
-z 文字列 | 文字列の長さが0の場合は真。 | ○ | × |
-o 文字列 | 文字列が現在有効に設定されているシェルオプションの文字列と一致する場合は真。シェルオプションの文字列については,「表5-34 setコマンドで設定するシェルオプション」の「名称」を参照してください。 | ○ | × |
文字列 = pattern | 文字列とpatternが一致する場合は真。 | ○ | × |
文字列 == pattern | 文字列とpatternが一致する場合は真。 | ○ | × |
文字列 != pattern | 文字列とpatternが不一致の場合は真。 | ○ | × |
文字列1 < 文字列2 | 文字列1と文字列2をASCIIコード順に比較します。文字列1より文字列2が大きい場合は真。 | ○※ | × |
文字列1 > 文字列2 | 文字列1と文字列2をASCIIコード順に比較します。文字列1より文字列2が小さい場合は真。 | ○※ | × |
比較する文字列にはスペースなどが含まれる場合があるため,"(ダブルクォーテーション)で囲むことを推奨します。使用例を次に示します。
str1="aaa" |
比較する文字列には*,?,[…]のワイルドカードが指定できます。ただし,testコマンドではワイルドカードを使用できません。また,ワイルドカードを使用した文字列を"(ダブルクォーテーション)で囲んだ場合,ワイルドカードが持つ意味が無効化されてしまうため,注意してください。使用例を次に示します。
str1="adsh" |
[[ ]]による文字列比較の使用例を次に示します。ワイルドカードは,*,?,[…]が指定できます。
if [[ abc == ab* ]]; then |
ワイルドカードについては,「5.1.5(5) ワイルドカード」を参照してください。
(3) ファイル属性
ファイルの形式や権限などの属性を評価する場合に使用する演算子を次の表に示します。
表5-23 ファイルの形式や権限などの属性を評価する演算子
演算子を用いた条件式 | 判定 | testコマンドまたは[[]]での使用可否 | letコマンドまたは(())での使用可否 |
---|---|---|---|
-a file | fileが存在する場合は真。 | ○ | × |
-b file | fileが存在し,ブロック型デバイスの場合は真。※1 | ○ | × |
-c file | fileが存在し,キャラクタ型デバイスの場合は真。※1 | ○ | × |
-d file | fileが存在し,ディレクトリの場合は真。 | ○ | × |
-e file | fileが存在する場合は真。 | ○ | × |
-f file | fileが存在し,レギュラーファイルの場合は真。 | ○ | × |
-g file | fileが存在し,setgidビットがセットされている場合は真。※1 | ○ | × |
-h file | fileが存在し,シンボリックリンクの場合は真。※2 | ○ | × |
-k file | fileが存在し,スティッキービットがセットされている場合は真。※1 | ○ | × |
-p file | fileが存在し,パイプファイルの場合は真。※1 | ○ | × |
-r file | Windowsの場合,fileが存在する場合は真。 UNIXの場合,fileが存在し,カレントプロセスから読み込み可能なときは真。 | ○ | × |
-s file | fileが存在し,ファイルサイズが1以上の場合は真。 | ○ | × |
-t fd | 端末をオープンしているfdの場合は真。※3 | ○ | × |
-u file | fileが存在し,setuidビットがセットされている場合は真。※1 | ○ | × |
-w file | Windowsの場合,読み取り専用属性が設定されていないか,またはディレクトリのときは真。 UNIXの場合,fileが存在し,カレントプロセスから書き込み可能なときは真。 | ○ | × |
-x file | Windowsの場合,次のどれかに該当するときは真。
| ○ | × |
-G file | fileが存在し,fileが属するグループが呼び出し元のプロセスの実効グループIDと一致している場合は真。※2 | ○ | × |
-L file | fileが存在し,シンボリックリンクの場合は真。※2 | ○ | × |
-O file | fileが存在し,所有者がプロセスの有効ユーザーIDの場合は真。※2 | ○ | × |
-S file | fileが存在し,ソケットの場合は真。※1 | ○ | × |
file1 -ef file2 | file1とfile2が存在し,file1とfile2の実体が同じ(シンボリックリンク先が同じまたはハードリンク先が同じ)場合は真。※2 | ○ | × |
file1 -nt file2 | file1とfile2が存在し,file1の更新日付がfile2よりも新しい場合は真。 | ○ | × |
file1 -ot file2 | file1とfile2が存在し,file1の更新日付がfile2よりも古い場合は真。 | ○ | × |
-H file | 常に偽。 | ○ | × |
ファイル属性の使用例を次に示します。
FILE="$HOME/script/test.ash" |
(4) 論理演算
論理演算で評価する場合に使用する演算子を次の表に示します。
表5-24 論理演算で評価する場合に使用する演算子
演算子を用いた条件式 | 判定 | testコマンドまたは[[]]での使用可否 | letコマンドまたは(())での使用可否 |
---|---|---|---|
expr1 -a expr2 | expr1とexpr2の結果が両方とも真の場合,真。 | ○※ | × |
expr1 -o expr2 | expr1とexpr2の結果がどちらか一方でも真の場合,真。 | ○※ | × |
expr1 && expr2 | expr1とexpr2の結果が両方とも真の場合,真。 | ○ | ○ |
expr1 || expr2 | expr1とexpr2の結果がどちらか一方でも真の場合,真。 | ○ | ○ |
! expr | exprの結果が偽の場合,真。 | ○ | ○ |
論理演算の使用例を次に示します。
DIR="/tmp" |
ただし,testコマンドで論理演算子「&&」および「||」を使用する場合は,次のように記述してください。
a=1 |
(5) 三項演算子
if-elseの省略記法である三項演算子を使用できます。JP1/Advanced Shellで使用できる三項演算子を次の表に示します。
表5-25 JP1/Advanced Shellで使用できる三項演算子
演算子を用いた条件式 | 判定 | testコマンドまたは[[]]での使用可否 | letコマンドまたは(())での使用可否 |
---|---|---|---|
expr1?expr2: expr3 | expr1の結果が真であればexpr2の結果,偽であればexpr3の結果を返します。 | × | ○ |
三項演算子の使用例を次に示します。
VAR1=3 |