気の向くままに辿るIT/ICT/IoT
bash

bash operator/演算子 1

ホーム前へ次へ
bashの演算子とは?

bash operator/演算子1

bash operator/演算子1

 UNIX/Linuxシェルの1つであるshやbashの演算子には、代入演算子、算術演算子、数値比較演算子、文字列比較演算子、論理演算子、条件演算子(三項演算子)、シフト演算子、ビット演算子、ファイル演算子、グループ化演算子、パターンマッチ演算子などがあります。

bash 代入演算子

 bashの代入演算子は、他の多くと同様、数値・文字列ともに=を使いますが、

代入演算子使用法意味
=variable=number
variable=string
左辺に右辺を代入
=と左辺・右辺の間にスペースを入れない

いずれの場合も=と左辺・右辺の間にスペースは入れてはいけません。

#!/usr/bin/sh 

 curdir_foo=`find . -name "*"` 

 for var_bar in $curdir_foo 

 ... 

 尚、bashではshell関数またはshell script内においてはバッククォートを伴い変数にコマンドを代入することもできます。

bash 算術演算子

 bashの算術演算子には四則演算の加減乗除と剰余があります。

算術演算子使用法意味
+num1 + num2加算
-num1 - num2減算
*num1 * num2乗算
/num1 / num2除算
%num1 % num2剰余

$ expr 1 + 1 

 2 

 bashでは数値の計算には$(())または、exprコマンドを利用し、exprコマンドについては代入演算子とは逆で数値と演算子の間にはスペースを入れなければいけません(冒頭の$ドル記号はbashのshellプロンプトです)。

$ val=`expr 2 - 1` 

$ echo $val 

 1 

$ val=$((5*4)) 

$ echo $val 

 20 

 計算式を変数に代入する場合、expr式全体をバッククォートで括るか、exprコマンドを使わずに$(())で括ります。

 尚、$(())の内側のカッコの中の式は左辺の前、左辺~演算子~右辺間、右辺の後ろなどにはスペースがあってもなくても式自体は成立します。

 ちなみに、バッククォートなしでイコールの右辺のみスペースを入れ[val= expr 2 - 1]としても実行できる場合もありますが敢えて利用する意味はないでしょう。

bash 数値比較演算子

 bashの数値比較演算子は、Perl(では文字列比較演算子)とは逆の演算子を使用します。

数値比較演算子使用法true条件
-gtnum1 -gt num2> より大きい
-ltnum1 -lt num2< より小さい
-genum1 -ge num2>= より大きいか等しい
-lenum1 -le num2<= より小さいか等しい
-eqnum1 -eq num2== 等しい
-nenum1 -ne num2!= 等しくない
-OPnum1 -OP num2算術多項演算子
-OPは、-gt/-lt/-ge/-le/-eq/-neのいずれか1つを表し、それぞれがtrueを返す
num1、num2は内部または外部整数である場合がある

 数値比較演算子と左辺・右辺との間にはスペースを入れます。

bash 文字列比較演算子

 bashの文字列比較演算子は、Perl(では数値比較演算子)とは逆の演算子を使用し、それに加えてNullの判定を行う演算子があります。

文字列比較演算子使用法true条件
=string1 = string2等しい(イコール記号1つ)
!=string1 != string2等しくない
<string1 < string2ASCII順においてより小さい
>string1 > string2ASCII順においてより大きい
-n-n string文字列の長さがゼロではない
-z-z string文字列の長さがゼロである

 文字列比較演算子と左辺・右辺との間にはスペースを入れます。

bashにはない文字列結合演算子を実現するには

$ string="bash  " 

$ value="operator" 

$ phrase=$string$value 

$ echo $phrase 

 bash operator 

 bashにはPerlの[.](ドット)に当たるような変数など文字を連結する文字列結合演算子はありませんが、単にスペースを入れずに変数同士をつなげて書けば連結されます。

$ phrase=$string'operator' 

$ echo $phrase 

 bash operator 

$ phrase=$string"operator" 

$ echo $phrase 

 bash operator 

$ phrase=${string}operator 

$ echo $phrase 

 bash operator 

 但し、変数、文字列の順で結合する必要がある場合に限っては、固定文字列をシングルクォートまたはダブルクォートで括るか、変数名を{ }で括ります(組み合わせても可)。

 当然、このようなケースで連結しない場合であっても変数名を{ }で括ることは可能です。

 尚、パラメータ展開でも変数名を{ }で括ります。

bash 論理演算子

 bashの論理演算子は下記の通りです。

論理演算子使用法意味
&&[ cond1 ] && [ cond2 ]論理積(論理AND)
||[ cond1 ] || [ cond2 ]論理和(論理OR)
! ! condition 論理否定/論理反転(否定NOT)

 また、Bourne Shell組み込みコマンドのtestコマンドにおける論理演算子は下記の通りです。

論理演算子使用法意味
-a[ cond1 -a cond2 ]&& 論理積(論理AND)
-o[ cond1 -o cond2 ]|| 論理和(論理OR)
![ ! condition ]論理否定/論理反転(否定NOT)

 尚、testコマンドのコーディングには、文字列"test"もしくはスクエアブラケット内でスペースを入れて式を続ける次のような方法があります。

test 式

 [ 式 ]

bash 三項演算子/条件演算子

 bashの三項演算子は下記の通りです。

三項演算子意味
expr1 ? expr2 : expr3expr1が真ならexpr2、expr1が偽ならexpr3を実行
多くのスクリプトやプログラミング言語で言うところのif...else文
C言語/Java/Perlではif文にこの記述を使うこともできる

bash シフト演算子

シフト演算子意味
<<左へビットシフト
>>右へビットシフト

 bashのシフト演算子は他のシフト演算子同様、ビット列を左または右へシフトする際に使用します。

bash ビット演算子

 bashで使用するビット演算子は下記の通りで他のビット演算子同様、値を(必要であれば変換し)2進数として演算を行います。

ビット演算子意味
&ビット論理積/ビットAND
|ビット論理和/ビットOR
^ビット排他的論理和/ビットXOR演算子
?ビット反転演算子[0111]→[1000]

LINK

ホーム前へ次へ