Unix / Linux - シェル基本演算子
こんにちは、志を抱くプログラマーさん!Unix/Linuxのシェル演算子の魅力的な世界を案内するのがとても楽しみです。10年以上コンピュータサイエンスを教えてきた者として、これらの演算子をマスターすることで、あなたのプログラミングの旅が大きく変わることを保証します。さあ、(start!)!
算術演算子
算術演算子はシェルスクリプティングにおける数学的な操作の基本単位です。これにより、スクリプト内で基本的な計算を行うことができます。
以下は最も一般的な算術演算子の表です:
演算子 | 説明 | 例 |
---|---|---|
+ | 加算 | 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
このスクリプトはa
とb
を関係演算子を使用して比較しています。このスクリプトを実行すると以下のようになります:
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