Unix / Linux - シェル基本演算子

こんにちは、志を抱くプログラマーさん!Unix/Linuxのシェル演算子の魅力的な世界を案内するのがとても楽しみです。10年以上コンピュータサイエンスを教えてきた者として、これらの演算子をマスターすることで、あなたのプログラミングの旅が大きく変わることを保証します。さあ、(start!)!

Unix / Linux - Basic Operators

算術演算子

算術演算子はシェルスクリプティングにおける数学的な操作の基本単位です。これにより、スクリプト内で基本的な計算を行うことができます。

以下は最も一般的な算術演算子の表です:

演算子 説明
+ 加算 expr $a + $b
- 減算 expr $a - $b
* 掛け算 expr $a \* $b
/ 除算 expr $a / $b
% 剰余 expr $a % $b
= 代入 a=$b

実際の例を見てみましょう:

#!/bin/bash
a=10
b=5

echo "加算: `expr $a + $b`"
echo "減算: `expr $a - $b`"
echo "掛け算: `expr $a \* $b`"
echo "除算: `expr $a / $b`"
echo "剰余: `expr $a % $b`"

このスクリプトでは、exprコマンドを使用して算術演算を行っています。バッククォート()はexpr`コマンドを実行し、その出力を置き換えるために使用されます。

このスクリプトを実行すると以下のようになります:

加算: 15
減算: 5
掛け算: 50
除算: 2
剰余: 0

シェルスクリプティングでは、スペースが非常に重要です。expr$a+$bは動作しませんが、expr $a + $bは動作します。変数に余裕を持たせるようなものです!

関係演算子

関係演算子は値を比較するために使用され、スクリプト内の条件を作成するために不可欠です。

以下は関係演算子の表です:

演算子 説明
-eq 等しい [ $a -eq $b ]
-ne 等しくない [ $a -ne $b ]
-gt より大きい [ $a -gt $b ]
-lt より小さい [ $a -lt $b ]
-ge より大きいか等しい [ $a -ge $b ]
-le より小さいか等しい [ $a -le $b ]

実際に使ってみましょう:

#!/bin/bash
a=10
b=20

if [ $a -eq $b ]
then
echo "$a は $b と等しい"
elif [ $a -gt $b ]
then
echo "$a は $b より大きい"
else
echo "$a は $b より小さい"
fi

このスクリプトはabを関係演算子を使用して比較しています。このスクリプトを実行すると以下のようになります:

10 は 20 より小さい

これらの演算子は質問していると考えます。「これらは等しいか?」、「これはそれより大きいか?」と口にすると、スクリプトを書くときに役立ちます。

布尔演算子

布尔演算子を使用すると、複数の条件を結合することができます。これらはスクリプトの論理的な糊のようなものです。

以下は布尔演算子の表です:

演算子 説明
! NOT [ ! false ]
-o OR [ $a -lt 20 -o $b -gt 100 ]
-a AND [ $a -lt 20 -a $b -gt 100 ]

以下のスクリプトで使用してみましょう:

#!/bin/bash
a=10
b=20

if [ $a -lt 20 -a $b -gt 15 ]
then
echo "両方の条件が真です"
else
echo "少なくとも一つの条件が偽です"
fi

このスクリプトを実行すると以下のようになります:

両方の条件が真です

布尔演算子は意思決定ツールと考えます。複数の要因に基づいてスクリプトが選択を行うのと同じです!

文字列演算子

文字列演算子は、文字列の比較と操作に使用されます。テキストデータを扱う際に非常に有用です。

以下は文字列演算子の表です:

演算子 説明
= 等しい [ $a = $b ]
!= 等しくない [ $a != $b ]
-z 文字列がnull [ -z $a ]
-n 文字列がnullでない [ -n $a ]
str 文字列が空でない [ $a ]

以下のスクリプトで使用してみましょう:

#!/bin/bash
a="Hello"
b="World"

if [ $a = $b ]
then
echo "文字列は等しい"
elif [ -z $a ]
then
echo "文字列 a は空です"
elif [ -n $b ]
then
echo "文字列 b は空ではありません"
else
echo "上記の条件のいずれも真ではありません"
fi

このスクリプトを実行すると以下のようになります:

文字列 b は空ではありません

文字列演算子はシェルスクリプティングの文法規則のようなものです。スクリプトがテキストを理解するのを助けます。

ファイルテスト演算子

ファイルテスト演算子は、さまざまなファイル条件をテストするために使用されます。スクリプトがファイルやディレクトリと対話する必要があるときに非常に重要です。

以下は一般的なファイルテスト演算子の表です:

演算子 説明
-d file ディレクトリが存在する [ -d $file ]
-f file ファイルが存在し、通常のファイルである [ -f $file ]
-r file ファイルが読み可能 [ -r $file ]
-w file ファイルが書き可能 [ -w $file ]
-x file ファイルが実行可能 [ -x $file ]
-s file ファイルがゼロサイズでない [ -s $file ]

以下のスクリプトで使用してみましょう:

#!/bin/bash
file="/etc/passwd"

if [ -f $file ]
then
echo "ファイルが存在します"
if [ -r $file ]
then
echo "ファイルは読み可能です"
fi
if [ -w $file ]
then
echo "ファイルは書き可能です"
fi
if [ -x $file ]
then
echo "ファイルは実行可能です"
fi
else
echo "ファイルは存在しません"
fi

このスクリプトを実行すると以下のようになります:

ファイルが存在します
ファイルは読み可能です

ファイルテスト演算子は、スクリプトのファイル探偵ツールのようなものです。スクリプトがファイルで何をできるか、何をできないかを理解するのを助けます。

Cシェル演算子

Cシェル(csh)には、Bシェルとはやや異なる独自の演算子セットがあります。以下是一些例:

#!/bin/csh
set a = 10
set b = 20

if ($a == $b) then
echo "a は b と等しい"
else if ($a != $b) then
echo "a は b と等しくない"
endif

if ($a > $b) then
echo "a は b より大きい"
else if ($a < $b) then
echo "a は b より小さい"
endif

Cシェルでは、==を等しい、!=を等しくないと使用します。また、直接><を比較に使用できます。

Kornシェル演算子

Kornシェル(ksh)はBシェルとCシェルの機能を兼ね備えています。以下はその例です:

#!/bin/ksh
a=10
b=20

if ((a == b))
then
print "a は b と等しい"
elif ((a != b))
then
print "a は b と等しくない"
fi

if ((a > b))
then
print "a は b より大きい"
elif ((a < b))
then
print "a は b より小さい"
fi

Kornシェルでは、(())を使用して算術演算と比較を行うことができ、シンタックスがよりクリーンで直感的です。

練習は完璧に近づくものです!これらの演算子を自分のスクリプトで実験してみてください。使うたびに、より快適になっていくことを保証します。ハッピースクリプティング!

Credits: Image by storyset