【Shell】演算子による文字列・整数の比較し、エラーコードを取得する

■文字列の比較

任意の2つの文字列を比較する演算子を下表に示す。

演算子比較内容比較後のエラーコード($?
str1 = str2str1とstr2は等しい0:真(等しい)
1:偽(等しくない)
str1 == str2str1とstr2は等しい0:真(等しい)
1:偽(等しくない)
str1 != str2str1とstr2は等しくない(否定)0:真(等しくない)
1:偽(等しい)
-n str1str1は空文字ではない0:真(空文字ではない)
1:偽(空文字である)
-z str1str1は空文字である0:真(空文字である)
1:偽(空文字でない)
str1およびstr2は任意の文字列

▼サンプルコードと実行例

・等しい:str1 = str2

・サンプルコード

# 初期値をセット
str1_aaa='aaa'
str2_aaa='aaa'
str3_bbb='bbb'

# aaaとaaaが等しいか比較
[ "$str1_aaa" = "$str2_aaa" ];echo $?
# aaaとbbbが等しいか比較
[ "$str1_aaa" = "$str3_bbb" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:等しい」、偽であれば「1:等しくない」を返す。

・等しい:str1 == str2

・サンプルコード

# 初期値をセット
str1_aaa='aaa'
str2_aaa='aaa'
str3_bbb='bbb'

# aaaとaaaが等しいか比較
[ "$str1_aaa" == "$str2_aaa" ];echo $?
# aaaとbbbが等しいか比較
[ "$str1_aaa" == "$str3_bbb" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:等しい」、偽であれば「1:等しくない」を返す。

・等しくない:str1 != str2

・サンプルコード

# 初期値をセット
str1_aaa='aaa'
str2_aaa='aaa'
str3_bbb='bbb'

# aaaとaaaが等しくないか比較
[ "$str1_aaa" != "$str2_aaa" ];echo $?
# aaaとbbbが等しくないか比較
[ "$str1_aaa" != "$str3_bbb" ];echo $?

・実行結果

1
0

エラーコード($?)は、真であれば「0:等しくない」、偽であれば「1:等しい」を返す。

・空文字ではない:-n str1

・サンプルコード

# 初期値をセット
str1_aaa='aaa'
str2_=''

# 'aaa'は空文字ではないか確認
[ -n "$str1_aaa" ];echo $?
# ''は空文字ではないか確認
[ -n "$str2_" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:空文字ではない」、偽であれば「1:空文字である」を返す。

・空文字である:-z str1

・サンプルコード

# 初期値をセット
str1_aaa='aaa'
str2_=''

# 'aaa'は空文字であるか確認
[ -z "$str1_aaa" ];echo $?
# ''は空文字であるか確認
[ -z "$str2_" ];echo $?

・実行結果

1
0

エラーコード($?)は、真であれば「0:空文字である」、偽であれば「1:空文字でない」を返す。

■整数の比較

任意の2つの整数を比較する演算子を下表に示す。

演算子比較内容比較後のエラーコード($?
int1 -eq int2int1とint2は等しい0:真(等しい)
1:偽(等しくない)
int1 -ne int2int1とint2は等しくない0:真(等しくない)
1:偽(等しい)
int1 -lt int2int1はint2より小さい0:真(小さい)
1:偽(小さくない)
int1 -le int2int1はint2以下0:真(以下)
1:偽(以下ではない)
int1 -gt int2int1はint2より大きい0:真(大きい)
1:偽(大きくない)
int1 -ge int2int1はint2以上0:真(以上)
1:偽(以上ではない)
int1およびint2は任意の整数

▼サンプルコードと実行例

・等しい:int1 -eq int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_4=4

# 7と7が等しいか比較
[ "$int1_7" -eq "$int2_7" ];echo $?
# 7と4が等しいか比較
[ "$int1_7" -eq "$int3_4" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:等しい」、偽であれば「1:等しくない」を返す。

・等しくない:int1 -ne int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_4=4

# 7と7が等しくないか比較
[ "$int1_7" -ne "$int2_7" ];echo $?
# 7と4が等しくないか比較
[ "$int1_7" -ne "$int3_4" ];echo $?

・実行結果

1
0

エラーコード($?)は、真であれば「0:等しくない」、偽であれば「1:等しい」を返す。

・より小さい:int1 -lt int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_9=9

# 7は7よりが小さいか比較
[ "$int1_7" -lt "$int2_7" ];echo $?
# 7は9より小さいか比較
[ "$int1_7" -lt "$int3_9" ];echo $?

・実行結果

1
0

エラーコード($?)は、真であれば「0:小さい」、偽であれば「1:小さくない」を返す。

・以下:int1 -le int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_4=4

# 7は7以下か比較
[ "$int1_7" -le "$int2_7" ];echo $?
# 7は4以下か比較
[ "$int1_7" -le "$int3_4" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:以下」、偽であれば「1:以下ではない」を返す。

・より大きい:int1 -gt int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_4=4

# 7は7より大きか比較
[ "$int1_7" -gt "$int2_7" ];echo $?
# 7は4より大きか比較
[ "$int1_7" -gt "$int3_4" ];echo $?

・実行結果

1
0

エラーコード($?)は、真であれば「0:大きい」、偽であれば「1:大きくはない」を返す。

・以上:int1 -ge int2

・サンプルコード

# 初期値をセット
int1_7=7
int2_7=7
int3_9=9

# 7は7以上か比較
[ "$int1_7" -ge "$int2_7" ];echo $?
# 7は9以上か比較
[ "$int1_7" -ge "$int3_9" ];echo $?

・実行結果

0
1

エラーコード($?)は、真であれば「0:以上」、偽であれば「1:以上ではない」を返す。

タイトルとURLをコピーしました