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

各シェルでサポートされているさまざまな演算子があります。この章では、Bourneシェル(デフォルトシェル)について詳しく説明します。

ここで、次の演算子について説明します-

  • 算術演算子
  • 関係演算子
  • ブール演算子
  • 文字列演算子
  • ファイルテスト演算子

Bourneシェルには元々、単純な算術演算を実行するメカニズムはありませんでしたが、外部プログラムも使用します。 awk または expr

次の例は、2つの数値を加算する方法を示しています-

#!/bin/sh

val=`expr 2 + 2`
echo "Total value : $val"

上記のスクリプトは次の結果を生成します-

Total value : 4

−を追加する際には、以下の点を考慮する必要があります。

  • 演算子と式の間にはスペースが必要です。たとえば、2 +2は正しくありません。2 +2と書く必要があります。

  • 完全な式はで囲む必要があります ‘ ‘、バッククォートと呼ばれます。

算術演算子

次の算術演算子はBourneShellでサポートされています。

変数を想定 a 10と変数を保持します b 20を保持します-

例を表示

オペレーター 説明
+(追加) 演算子のいずれかの側に値を追加します `expr $ a + $ b`は30を与えます
-(減算) 左側のオペランドから右側のオペランドを減算します `expr $ a- $ b`は-10を与えます
*(乗算) 演算子のいずれかの側で値を乗算します `expr $ a \ * $ b`は200を与えます
/(除算) 左側のオペランドを右側のオペランドで除算します `expr $ b / $ a`は2を与えます
% (係数) 左側のオペランドを右側のオペランドで除算し、余りを返します `expr $ b%$ a`は0を与えます
=(割り当て) 左のオペランドに右のオペランドを割り当てます a = $ bは、bの値をaに割り当てます。
==(平等) 2つの数値を比較し、両方が同じ場合はtrueを返します。 [$ a == $ b]はfalseを返します。
!=(平等ではない) 2つの数値を比較し、両方が異なる場合はtrueを返します。 [$ a!= $ b]はtrueを返します。

たとえば、すべての条件式は、周囲にスペースがある角括弧の内側にある必要があることを理解することが非常に重要です。 [ $a == $b ] 正しいのに対し、、 [$a==$b] 間違っています。

すべての算術計算は長整数を使用して行われます。

関係演算子

Bourne Shellは、数値に固有の次の関係演算子をサポートしています。これらの演算子は、値が数値でない限り、文字列値に対しては機能しません。

たとえば、次の演算子は、10と20の間、および「10」と「20」の間の関係をチェックしますが、「10」と「20」の間の関係はチェックしません。

変数を想定 a 10と変数を保持します b 20を保持します-

例を表示

オペレーター 説明
-eq 2つのオペランドの値が等しいかどうかをチェックします。はいの場合、条件は真になります。 [$ a -eq $ b]は正しくありません。
-ne 2つのオペランドの値が等しいかどうかをチェックします。値が等しくない場合、条件は真になります。 [$ a -ne $ b]は真です。
-gt 左のオペランドの値が右のオペランドの値より大きいかどうかを確認します。はいの場合、条件は真になります。 [$ a -gt $ b]は正しくありません。
-lt 左のオペランドの値が右のオペランドの値よりも小さいかどうかを確認します。はいの場合、条件は真になります。 [$ a -lt $ b]は真です。
-ge 左のオペランドの値が右のオペランドの値以上であるかどうかを確認します。はいの場合、条件は真になります。 [$ a -ge $ b]は正しくありません。
-le 左のオペランドの値が右のオペランドの値以下であるかどうかをチェックします。はいの場合、条件は真になります。 [$ a -le $ b]は真です。

すべての条件式は、周囲にスペースを入れた角括弧内に配置する必要があることを理解することが非常に重要です。例えば、[ $a <= $b ] 正しいのに対し、、 [$a <= $b] 間違っています。

ブール演算子

次のブール演算子は、BourneShellでサポートされています。

変数を想定 a 10と変数を保持します b 20を保持します-

例を表示

オペレーター 説明
! これは論理否定です。これにより、真の状態が偽に、またはその逆に反転します。 [!false]はtrueです。
-o これは論理的です OR。オペランドの1つが真の場合、条件は真になります。 [$ a -lt 20 -o $ b -gt100]は真です。
-a これは論理的です AND。両方のオペランドが真の場合、条件は真になり、そうでない場合は偽になります。 [$ a -lt 20 -a $ b -gt100]はfalseです。

文字列演算子

次の文字列演算子は、BourneShellでサポートされています。

変数を想定 a 「abc」と変数を保持します b 「efg」を保持し、次に−

例を表示

オペレーター 説明
= 2つのオペランドの値が等しいかどうかをチェックします。はいの場合、条件は真になります。 [$ a = $ b]は正しくありません。
!= 2つのオペランドの値が等しいかどうかをチェックします。値が等しくない場合、条件は真になります。 [$ a!= $ b]は真です。
-z 指定された文字列のオペランドサイズがゼロかどうかを確認します。長さがゼロの場合、trueを返します。 [-z $ a]は正しくありません。
-n 指定された文字列のオペランドサイズがゼロ以外であるかどうかを確認します。長さがゼロ以外の場合は、trueを返します。 [-n $ a]は偽ではありません。
str かどうかを確認します str空の文字列ではありません。空の場合はfalseを返します。 [$ a]は誤りではありません。

ファイルテスト演算子

Unixファイルに関連付けられたさまざまなプロパティをテストするために使用できる演算子がいくつかあります。

変数を想定する file サイズが100バイトである既存のファイル名「test」を保持します。 readwrite そして execute −の許可

例を表示

オペレーター 説明
-b file ファイルがブロック特殊ファイルであるかどうかを確認します。はいの場合、条件は真になります。 [-b $ file]はfalseです。
-c file ファイルが文字特殊ファイルかどうかを確認します。はいの場合、条件は真になります。 [-c $ file]はfalseです。
-d file ファイルがディレクトリかどうかを確認します。はいの場合、条件は真になります。 [-d $ file]は正しくありません。
-f file ファイルがディレクトリや特殊ファイルではなく、通常のファイルであるかどうかを確認します。はいの場合、条件は真になります。 [-f $ file]はtrueです。
-g file ファイルにsetgroup ID(SGID)ビットが設定されているかどうかを確認します。はいの場合、条件は真になります。 [-g $ file]はfalseです。
-k file ファイルにスティッキービットが設定されているかどうかを確認します。はいの場合、条件は真になります。 [-k $ file]はfalseです。
-p file ファイルが名前付きパイプであるかどうかを確認します。はいの場合、条件は真になります。 [-p $ file]はfalseです。
-t file ファイル記述子が開いていて、端末に関連付けられているかどうかを確認します。はいの場合、条件は真になります。 [-t $ file]はfalseです。
-u file ファイルにSetUser ID(SUID)ビットが設定されているかどうかを確認します。はいの場合、条件は真になります。 [-u $ file]はfalseです。
-r file ファイルが読み取り可能かどうかを確認します。はいの場合、条件は真になります。 [-r $ file]はtrueです。
-w file ファイルが書き込み可能かどうかを確認します。はいの場合、条件は真になります。 [-w $ file]はtrueです。
-x file ファイルが実行可能かどうかを確認します。はいの場合、条件は真になります。 [-x $ file]はtrueです。
-s file ファイルのサイズが0より大きいかどうかを確認します。はいの場合、条件は真になります。 [-s $ file]はtrueです。
-e file ファイルが存在するかどうかを確認します。ファイルがディレクトリであるが存在する場合でもtrueです。 [-e $ file]はtrueです。

Cシェル演算子

次のリンクは、Cシェル演算子に関する簡単なアイデアを提供します-

Cシェル演算子

Kornシェルオペレーター

次のリンクは、Kornシェル演算子を理解するのに役立ちます-

Kornシェルオペレーター