こんにちは、さるまりんです。
以前、シェルスクリプトで変数が空文字列かを判断する方法について書きました。
今回は一致する(もしくはしない)かを調べる方法についてメモします。
文字列が一致するか比較するには演算子=
を使います。
一致しないかを調べる場合は演算子!=
です。
簡単にプログラムにしてみました。
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
で 変数PARAM1
とPARAM2
の持つ文字列が一致するか、
if [ $PARAM1 != $PARAM2 ]; then
で 変数PARAM1
とPARAM2
の持つ文字列が一致しないかをテストしています。
実行例です。
$ ./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つ目の引数にも行いNUM1
とNUM2
を比較します。
if [ $NUM1 -eq $NUM2 ]; then
で 変数NUM1とNUM2の持つ数値が一致するか、
if [ $NUM1 -ne $NUM2 ]; then
で 変数NUM1
とNUM2
の持つ数値が一致しないかをテストしています。
実行例です。
$ ./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
です。
それぞれ数値比較演算子で
-lt
はless than → 小さい → <
-le
はless than or equal to → 小さいか同じ → ≦
-gt
はgreater than → 大きい → >
-ge
はgreater than or equal to → 大きいか同じ → ≧
です。
ここまでで出てきていた-eq
はequal to、-ne
はnot equal toですね。
文字列として比較、数値として比較、使うものが違うんですね。
読んでくださってありがとうございます。
それではまた!