Bash での数値比較のコード解説
Bash での数値比較
Bashスクリプトにおいて数値を比較するには、いくつかの方法があります。主に、単一括弧 ([]) と二重括弧 (( )) を使用します。
単一括弧 ([]) による比較
- 比較演算子:
-eq
,-ne
,-gt
,-lt
,-ge
,-le
-eq
: 等しい-ne
: 等しくない-gt
: より大きい-ge
: 以上
num1=10
num2=20
if [ $num1 -gt $num2 ]
then
echo "num1 は num2 より大きい"
fi
二重括弧 (( )) による比較
- 比較演算子:
==
,!=
,>
,<
,>=
,<=
- C言語風の算術演算が可能
num1=10
num2=20
if (( num1 > num2 ))
then
echo "num1 は num2 より大きい"
fi
注意点
- 比較する値は整数である必要があります。浮動小数点数は正確に比較できません。
- 比較演算子の周囲のスペースは重要です。誤った結果になる可能性があります。
例題
#!/bin/bash
# 入力値を取得
read -p "数値を入力してください: " num
# 数値が偶数か奇数か判定
if (( num % 2 == 0 ))
then
echo "入力された数値は偶数です"
else
echo "入力された数値は奇数です"
fi
さらに詳しく
- 浮動小数点数の比較が必要な場合は、
bc
コマンドや他のツールを使用する必要があります。 - より複雑な算術演算や条件式が必要な場合は、
expr
コマンドやawk
を検討してください。
Bash での数値比較のコード解説
コード例 1: 単一括弧 ([]) による比較
num1=10
num2=20
if [ $num1 -gt $num2 ]
then
echo "num1 は num2 より大きい"
fi
num1=10
とnum2=20
: 変数num1
に 10、num2
に 20 を代入します。if [ $num1 -gt $num2 ]
:if
文で条件式を開始します。[ ]
内で数値比較を行います。-gt
は「より大きい」を意味します。then
: 条件式が真の場合に実行されるブロックを開始します。echo "num1 は num2 より大きい"
: 条件が真の場合に表示されるメッセージです。fi
:if
文の終了を示します。
num1=10
num2=20
if (( num1 > num2 ))
then
echo "num1 は num2 より大きい"
fi
- このコードは、単一括弧の場合と基本的には同じですが、二重括弧
(( ))
を使用している点が異なります。 - 二重括弧は、C言語風の算術演算が可能で、一般的にパフォーマンスが良いとされています。
コード例 3: 偶数・奇数の判定
#!/bin/bash
read -p "数値を入力してください: " num
if (( num % 2 == 0 ))
then
echo "入力された数値は偶数です"
else
echo "入力された数値は奇数です"
fi
#!/bin/bash
: シェルスクリプトの宣言です。read -p "数値を入力してください: " num
: ユーザーから数値を入力し、変数num
に代入します。if (( num % 2 == 0 ))
:num
を 2 で割った余りが 0 であれば偶数、そうでなければ奇数です。then
とelse
: 条件に応じた処理を分岐します。
コード解説のポイント
- 変数の代入方法
- 比較演算子の意味と使い方
if
文の構文- 算術演算子の使用
- ユーザー入力の取得方法
- 条件分岐の処理
代替方法
let コマンド
- 算術演算専用のコマンドです。
- 比較演算子も使用できますが、二重括弧と似たような機能を持ちます。
let num1=10
let num2=20
if let "num1 > num2"; then
echo "num1 は num2 より大きい"
fi
[[ ]] コマンド
[ ]
の拡張版で、より強力なパターンマッチングや条件式をサポートします。- 数値比較も可能ですが、通常は単一括弧や二重括弧で十分です。
num1=10
num2=20
if [[ $num1 -gt $num2 ]]; then
echo "num1 は num2 より大きい"
fi
expr コマンド
- 算術式を評価するコマンドですが、数値比較にはあまり適していません。
- 比較演算子は
=
と!=
のみサポートしています。
num1=10
num2=20
if expr $num1 \> $num2 \> /dev/null; then
echo "num1 は num2 より大きい"
fi
どの方法を使うべきか
- 一般的には、二重括弧
(( ))
が最もシンプルで効率的です。 - 単一括弧
[]
もよく使用されますが、二重括弧ほど柔軟ではありません。 let
コマンドは、算術演算に特化していますが、数値比較にはあまり使いません。[[ ]]
コマンドは、パターンマッチングや他の条件式と一緒に使う場合に便利です。expr
コマンドは、他の方法が使える場合は避けるべきです。
重要なポイント
- どの方法でも、比較する値は整数である必要があります。
- 比較演算子の周囲のスペースに注意してください。
expr
コマンドを使用する場合は、\>
でエスケープする必要があります。
bash shell numeric