シェルスクリプトの基本演算子まとめ|算術・関係・論理・ビット・ファイルテストを解説
シェル(Shell)とは、プログラマがコマンドを実行し、オペレーティングシステムと直接対話するためのインターフェースです。シェルスクリプトは、シェルに実行させたいコマンド群を記述したものを指します。
シェルにも変数があり、それらを操作するための演算子が用意されています。シェルスクリプトには、主に以下の5種類の基本演算子が存在します。
- 算術演算子(Arithmetic Operators)
- 関係演算子(Relational Operators)
- 論理演算子(Boolean Operators)
- ビット演算子(Bitwise Operators)
- ファイルテスト演算子(File Test Operators)
1. 算術演算子
算術演算子は、一般的な計算や数学的な処理を行うために使用されます。シェルスクリプトで利用できる有効な算術演算子は7つあります。
- 加算(+):2つのオペランド(変数)を足し合わせます。
- 減算(-):2つの変数(オペランド)の差を求めます。
- 乗算(*):2つの変数(オペランド)を掛け合わせます。
- 除算(/):2つの変数(オペランド)を割り算します。
- 剰余(%):割り算を行った際の余りを求めます。
- インクリメント(++):現在の値に1を加えます。
- デクリメント(--):現在の値から1を引きます。
サンプルコード
a = 32
b = 23
add = $((a + b))
echo sum of a and b is $add
sub = $((a - b))
echo Subtraction of a and b is $sub
mul = $((a * b))
echo product of a and b is $mul
div = $((a / b))
echo division of a and b is $div
mod = $((a % b))
echo remainder when a is divided b is $mod
((++a))
echo Increment operator when applied on "a" results into a = $a
((--b))
echo Decrement operator when applied on "b" results into b = $b
実行結果
sum of a and b is 55 Subtraction of a and b is 9 product of a and b is 736 division of a and b is 1 remainder when a is divided b is 9 Increment operator when applied on a results into a = 33 Decrement operator when applied on b results into b = 24
2. 関係演算子(比較演算子)
関係演算子は、オペランド同士の大小関係や等価性を定義します。戻り値は、演算子とオペランドの組み合わせによって true または false のいずれかになります。シェルスクリプトには6種類の関係演算子があります。
- == 演算子:2つの値が等しいかどうかを判定します。等しければ true、そうでなければ false を返します。
- != 演算子:2つの値が等しくないことを確認します。等しくなければ true、等しければ false を返します。
- < 演算子:左辺が右辺より小さい場合に true、そうでなければ false を返します。
- <= 演算子:左辺が右辺以下の場合に true、そうでなければ false を返します。
- > 演算子:左辺が右辺より大きい場合に true、そうでなければ false を返します。
- >= 演算子:左辺が右辺以上の場合に true、そうでなければ false を返します。
サンプルコード
a = 32
b = 67
if(( $a==$b ))
then
echo a is equal to b.
else
echo a is not equal to b.
fi
if(( $a!=$b ))
then
echo a is not equal to b.
else
echo a is equal to b.
fi
if(( $a<$b ))
then
echo a is less than b.
else
echo a is not less than b.
fi
if(( $a<=$b ))
then
echo a is less than or equal to b.
else
echo a is not less than or equal to b.
fi
if(( $a>$b ))
then
echo a is greater than b.
else
echo a is not greater than b.
fi
if(( $a>=$b ))
then
echo a is greater than or equal to b.
else
echo a is not greater than or equal to b.
fi
実行結果
a is not equal to b. a is not equal to b. a is less than b. a is less than or equal to b. a is not greater than b. a is not greater than or equal to b.
3. 論理演算子(ブール演算子)
論理演算子は、シェルスクリプト内で論理演算を行うために使用されます。シェルスクリプトには3種類の論理演算子があります。
- 論理AND(&&):両方のオペランドが true の場合に true を返し、それ以外は false を返します。
- 論理OR(||):両方のオペランドが false の場合に false を返し、それ以外は true を返します。
- 論理NOT(!):単一のオペランドの否定を計算します。オペランドが true なら false を、false なら true を返します。
サンプルコード
a = true
b = false
if(($a == "true" & $b == "true" ))
then
echo Both are true.
else
echo Both are not true.
fi
if(($a == "true" || $b == "true" ))
then
echo Atleast one of them is true.
else
echo None of them is true.
fi
if(( ! $a == "true" ))
then
echo "a" was intially false.
else
echo "a" was intially true.
fi
実行結果
Both are not true. Atleast one of them is true a was intially true.
4. ビット演算子
ビット演算子は、値をビット単位で操作するための演算子です。シェルスクリプトには6種類のビット演算子があります。
- ビットAND(&):オペランドの各ビットに対してバイナリのAND演算を行います。第1変数の各ビットが、第2変数の対応するビットと演算されます。
- ビットOR(|):オペランドの各ビットに対してバイナリのOR演算を行います。
- ビットXOR(^):オペランドの各ビットに対してバイナリのXOR演算を行います。
- ビット反転(~):オペランドの各ビットに対してNOT演算(ビット反転)を行います。
- 左シフト(<<):演算子の右側に指定された回数だけ、オペランドのビットを左にシフトします。
- 右シフト(>>):演算子の右側に指定された回数だけ、オペランドのビットを右にシフトします。
サンプルコード
a = 14 b = 67 bitwiseAND=$(( a&b )) echo Bitwise AND of a and b is $bitwiseAND bitwiseOR=$(( a|b )) echo Bitwise OR of a and b is $bitwiseOR bitwiseXOR=$(( a^b )) echo Bitwise XOR of a and b is $bitwiseXOR bitiwiseComplement=$(( ~a )) echo Bitwise Compliment of a is $bitiwiseComplement leftshift=$(( a<<1 )) echo Left Shift of a is $leftshift rightshift=$(( b>>1 )) echo Right Shift of b is $rightshift
実行結果
Bitwise AND of a and b is 2 Bitwise OR of a and b is 79 Bitwise XOR of a and b is 77 Bitwise Compliment of a is -15 Left Shift of a is 28 Right Shift of b is 33
5. ファイルテスト演算子
ファイルテスト演算子は、ファイルが持つ特定の属性を検査するために使用されます。代表的なファイルテスト演算子は以下の通りです。
- -b 演算子:指定したファイルがブロックスペシャルファイルかどうかを確認します。ブロックスペシャルファイルであれば true、そうでなければ false を返します。
- -s 演算子:指定したファイルのサイズを確認します。ファイルサイズが0より大きければ true、そうでなければ false を返します。
- -r 演算子:ファイルの読み取り権限があるかどうかを確認します。読み取りが許可されていれば true、そうでなければ false を返します。
- -w 演算子:ファイルへの書き込み権限があるかどうかを確認します。書き込みが許可されていれば true、そうでなければ false を返します。
- -x 演算子:ファイルの実行権限があるかどうかを確認します。実行が許可されていれば true、そうでなければ false を返します。
まとめ
シェルスクリプトでは、算術演算子による計算、関係演算子による条件分岐、論理演算子による複合条件の評価、ビット演算子による低レベルなデータ操作、そしてファイルテスト演算子によるファイル属性のチェックなど、多彩な処理を記述できます。これらの演算子を正しく理解することで、より柔軟で信頼性の高いシェルスクリプトを作成できるようになります。
-
シェルスクリプトでヒアドキュメント(Heredoc)を使いこなす方法
ヒアドキュメント(Heredoc)とは、特別なコードブロックとして扱われる入力やファイルストリームのリテラルのことです。このコードブロックはコマンドへ渡されて処理されます。ヒアドキュメントはUNIXシェルに由来する機能で、sh、tcsh、ksh、bash、zsh、cshなど主要なLinuxシェルで利用できます。さらに、Perl、Ruby、PHPといった他のプログラミング言語でも同様の機能がサポートされています。 ヒアドキュメントの基本構造 ヒアドキュメントは、2つの山括弧 (<<) の後にデリミタ(区切りトークン)を続けて記述します。そして、開始時に使ったのと同じデリミタでコードブ
-
Linuxシェルの基礎とシェルスクリプト入門のポイント – パートI
百聞は一見に如かず——以下の図を見れば、Linuxの仕組みがひと目でわかります。 関連記事 シェルプログラミングを学べる5つのシェルスクリプト – パートII Linux BASHスクリプティングの世界を旅する – パートIII Linuxシェルの基礎用語 シェル(Shell): ユーザーとオペレーティングシステム(OS)をつなぐコマンドラインインタプリタ。コマンドの実行や、テキスト形式のスクリプト作成が可能です。 プロセス(Process): ユーザーがシステム上で実行するあらゆるタスクのこと。単なる「タスク」より少し複雑な概念です。 ファイル(File): ハードディスク(HDD)上