シェルスクリプトで文字列や数値が一致するか判断する

こんにちは、さるまりんです。

以前、シェルスクリプトで変数が空文字列かを判断する方法について書きました。

今回は一致する(もしくはしない)かを調べる方法についてメモします。

文字列が一致するか比較するには演算子=を使います。

一致しないかを調べる場合は演算子!=です。

簡単にプログラムにしてみました。

checkifstringsmatch.sh

#!/bin/sh

PARAM1=$1
PARAM2=$2

echo "[$PARAM1] [$PARAM2]"

if [ $PARAM1 = $PARAM2 ]; then
    echo strings given match
fi
if [ $PARAM1 != $PARAM2 ]; then
    echo strings given do not match
fi

if [ $PARAM1 = $PARAM2 ]; then

で 変数PARAM1PARAM2の持つ文字列が一致するか、

if [ $PARAM1 != $PARAM2 ]; then

で 変数PARAM1PARAM2の持つ文字列が一致しないかをテストしています。

実行例です。

$ ./checkifstringsmatch.sh abc abc
[abc] [abc]
strings given match
$ ./checkifstringsmatch.sh abc ABC
[abc] [ABC]
strings given do not match

今度は数値として比較してみます。

数値が一致するか比較するには演算子-eqを使います。

一致しないかを調べる場合は演算子-neです。

こちらもプログラムにしてみました。

checkifnumbersmatch.sh

#!/bin/sh

PARAM1=$1
PARAM2=$2

NUM1=$(( PARAM1 ))
NUM2=$(( PARAM2 ))

echo [$NUM1] [$NUM2]

if [ $NUM1 -eq $NUM2 ]; then
    echo two numbers are the same.
fi

if [ $NUM1 -ne $NUM2 ]; then
    echo two numbers are different.
fi

これで変数PARAM1の文字列を数値に変換し変数NUM1に代入しています。

NUM1=$(( PARAM1 ))

同じことを2つ目の引数にも行いNUM1NUM2を比較します。

if [ $NUM1 -eq $NUM2 ]; then

で 変数NUM1とNUM2の持つ数値が一致するか、

if [ $NUM1 -ne $NUM2 ]; then

で 変数NUM1NUM2の持つ数値が一致しないかをテストしています。

実行例です。

$ ./checkifnumbersmatch.sh 2 3
[2] [3]
two numbers are different.
$ ./checkifnumbersmatch.sh 2 2
[2] [2]
two numbers are the same.

-eq-neの他にも文字列比較のための演算子があります。

-lt, -le, -gt, -geです。

それぞれ数値比較演算子で

-ltless than → 小さい → < 

-leless than or equal to → 小さいか同じ →

-gtgreater than → 大きい → >

-gegreater than or equal to → 大きいか同じ →

です。

ここまでで出てきていた-eqequal to-nenot equal toですね。

文字列として比較、数値として比較、使うものが違うんですね。

読んでくださってありがとうございます。

それではまた!