shellの基本演算子
7471 ワード
Shellは、次のような複数の演算子をサポートします.演算子 関係演算子 ブール演算子 文字列演算子 ファイルテスト演算子 原生bashは簡単な数学演算をサポートしていませんが、awkやexpr、exprなどの他のコマンドで実現できます.exprは、式の評価操作を完了するための式計算ツールです.
たとえば、2つの数を加算します(単一引用符ではなく逆引用符`を使用することに注意してください):
スクリプトを実行し、次のように出力します.
次の点に注意してください.式と演算子の間にスペースが必要です.例えば2+2は間違っていて、2+2と書かなければなりません.これは私たちがよく知っている多くのプログラミング言語とは違います. 完全な式は``に含まれる.この文字はよく使われる一重引用符ではなく、Escキーの下にあることに注意してください.
1.算術演算子
次の表に、変数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に与える
==
等しい?
[$a=$b]falseを返す
!=
等しくない?
[$a!=$b]はtrueを返します.
注意:条件式は角カッコの間に配置され、スペースが必要です.たとえば、[$a=$b]は間違っています.[$a=$b]と書く必要があります.≪インスタンス|Instance|emdw≫
スクリプトを実行し、次のように出力します.
注意:乗算記号(*)の前には、乗算を実現するために反スラッシュ()を付けなければなりません. if...then...fiは条件文で、後で説明します. MACにおけるshellのexpr構文は、$((式))であり、ここで式の「*」は、エスケープ記号「」を必要としない.
2.関係演算子関係演算子は、文字列の値が数値でない限り、数値のみをサポートします.
次の表に、変数aが10、変数bが20であると仮定した一般的な関係演算子を示します.
演算子
説明
例を引く
-eq
2つの数が等しい場合はtrueを返します.
[$a-eq$b]falseを返す
-ne
2つの数が等しくない場合はtrueを返します.
[$a-ne$b]はtrueを返します.
-gt
左の数が右の戻りtrueより大きい
[$a-gt$b]falseを返す
-lt
左の数が右の戻りtrueより小さい
[$a-lt$b]はtrueを返します
-ge
左の数が右の戻りtrueより大きい
[$a-ge$b]falseを返す
-le
左の数が右の戻りtrueより小さい
[$a-le$b]はtrueを返します.
≪インスタンス|Instance|emdw≫
スクリプトを実行し、次のように出力します.
3.ブール演算子
次の表に、変数aが10、変数bが20であると仮定した一般的なブール演算子を示します.
演算子
説明
例を引く
!
非演算
[!false]はtrueを返します
-o
または演算
[$a-lt 20-o$b-gt 100]はtrueを返します.
-a
演算
[$a-lt 20-a$b-gt 100]falseを返す
≪インスタンス|Instance|emdw≫
スクリプトを実行し、次のように出力します.
4.論理演算子
以下にShellの論理演算子を紹介し,変数aが10,変数bが20であると仮定する.
演算子
説明
例を引く
&&
ロジックのAND
[$a-lt 100&&$b-gt 100]]falseを返す
124 124
ロジックのOR
[$a-lt 100|$b-gt 100]]はtrueを返します.
≪インスタンス|Instance|emdw≫
スクリプトを実行し、次のように出力します.
5.文字列演算子
次の表に、変数aがabcであり、変数bがefgであると仮定した一般的な文字列演算子を示します.
演算子
説明
例を引く
を選択します.
2つの文字列が等しい場合はtrueを返します.
[$a=$b]falseを返す
!=
2つの文字列が等しくない場合はtrueを返します.
[$a!=$b]はtrueを返します.
-z
文字列の長さ0はtrueを返します.
[-z$a]falseを返します
-n
文字列の長さが0でない場合はtrueを返します.
[-n'$a']はtrueを返します.
str
文字列が空でない場合はtrueを返します.
[$a]はtrueを返します
≪インスタンス|Instance|emdw≫
スクリプトを実行し、次のように出力します.
6.ファイルテスト演算子
ファイルテスト演算子は、Unixファイルのさまざまなプロパティを検出するために使用されます.
オペレータ
説明
例を引く
-b file
ファイルはブロックデバイスファイルでtrueを返します
[-b$file]falseを返します
-c file
ファイルは文字デバイスファイルでtrueを返します
[-c$file]falseを返します
-d file
ファイルはディレクトリがtrueを返す
[-d$file]falseを返します
-f file
ファイルが通常のファイルかどうかはtrueを返します.
[-f$file]はtrueを返します
-g file
ファイルはSGIDビットを設定してtrueを返す
[-g$file]falseを返します
-u file
ファイルはSUIDビットを設定してtrueを返します
[-u$file]falseを返します
-k file
ファイルにSticky Bitを設定してtrueを返します.
[-k$file]falseを返します
-p file
ファイルは有名なパイプでtrueを返します
[-p$file]falseを返します
-r file
ファイルが存在し、読み取り可能な戻りtrue
[-r$file]はtrueを返します.
-w file
ファイルが存在し、書き込み可能でtrueを返します.
[-w$file]はtrueを返します
-x file
ファイルが存在し、trueを返すことができます.
[-x$file]はtrueを返します
-s file
ファイルが空の場合はtrueを返します
[-s$file]はtrueを返します
-e file
ディレクトリを含むファイルが存在する場合はtrueを返します.
[-e$file]はtrueを返します
インスタンス変数fileは、ファイル「/var/www/runoob/test.sh」を表し、rwx権限を持つ100バイトのサイズです.
スクリプトを実行し、次のように出力します.
たとえば、2つの数を加算します(単一引用符ではなく逆引用符`を使用することに注意してください):
#!/bin/bash
val=`expr 2 + 2`
echo " : $val"
スクリプトを実行し、次のように出力します.
: 4
次の点に注意してください.
1.算術演算子
次の表に、変数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に与える
==
等しい?
[$a=$b]falseを返す
!=
等しくない?
[$a!=$b]はtrueを返します.
注意:条件式は角カッコの間に配置され、スペースが必要です.たとえば、[$a=$b]は間違っています.[$a=$b]と書く必要があります.≪インスタンス|Instance|emdw≫
#!/bin/bash
a=10
b=20
val=`expr $a + $b`
echo "a + b : $val"
val=`expr $a - $b`
echo "a - b : $val"
val=`expr $a \* $b`
echo "a * b : $val"
val=`expr $b / $a`
echo "b / a : $val"
val=`expr $b % $a`
echo "b % a : $val"
if [ $a == $b ]
then
echo "a b"
fi
if [ $a != $b ]
then
echo "a b"
fi
スクリプトを実行し、次のように出力します.
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a b
注意:
2.関係演算子
次の表に、変数aが10、変数bが20であると仮定した一般的な関係演算子を示します.
演算子
説明
例を引く
-eq
2つの数が等しい場合はtrueを返します.
[$a-eq$b]falseを返す
-ne
2つの数が等しくない場合はtrueを返します.
[$a-ne$b]はtrueを返します.
-gt
左の数が右の戻りtrueより大きい
[$a-gt$b]falseを返す
-lt
左の数が右の戻りtrueより小さい
[$a-lt$b]はtrueを返します
-ge
左の数が右の戻りtrueより大きい
[$a-ge$b]falseを返す
-le
左の数が右の戻りtrueより小さい
[$a-le$b]はtrueを返します.
≪インスタンス|Instance|emdw≫
#!/bin/bash
a=10
b=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a b"
else
echo "$a -eq $b: a b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a b"
else
echo "$a -ne $b : a b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a b"
else
echo "$a -gt $b: a b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a b"
else
echo "$a -lt $b: a b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a b"
else
echo "$a -ge $b: a b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a b"
else
echo "$a -le $b: a b"
fi
スクリプトを実行し、次のように出力します.
10 -eq 20: a b
10 -ne 20: a b
10 -gt 20: a b
10 -lt 20: a b
10 -ge 20: a b
10 -le 20: a b
3.ブール演算子
次の表に、変数aが10、変数bが20であると仮定した一般的なブール演算子を示します.
演算子
説明
例を引く
!
非演算
[!false]はtrueを返します
-o
または演算
[$a-lt 20-o$b-gt 100]はtrueを返します.
-a
演算
[$a-lt 20-a$b-gt 100]falseを返す
≪インスタンス|Instance|emdw≫
#!/bin/bash
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a b"
else
echo "$a != $b: a b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 100 $b 15 : true"
else
echo "$a 100 $b 15 : false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 100 $b 100 : true"
else
echo "$a 100 $b 100 : false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 5 $b 100 : true"
else
echo "$a 5 $b 100 : false"
fi
スクリプトを実行し、次のように出力します.
10 != 20 : a b
10 100 20 15 : true
10 100 20 100 : true
10 5 20 100 : false
4.論理演算子
以下にShellの論理演算子を紹介し,変数aが10,変数bが20であると仮定する.
演算子
説明
例を引く
&&
ロジックのAND
[$a-lt 100&&$b-gt 100]]falseを返す
124 124
ロジックのOR
[$a-lt 100|$b-gt 100]]はtrueを返します.
≪インスタンス|Instance|emdw≫
#!/bin/bash
a=10
b=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo " true"
else
echo " false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo " true"
else
echo " false"
fi
スクリプトを実行し、次のように出力します.
false
true
5.文字列演算子
次の表に、変数aがabcであり、変数bがefgであると仮定した一般的な文字列演算子を示します.
演算子
説明
例を引く
を選択します.
2つの文字列が等しい場合はtrueを返します.
[$a=$b]falseを返す
!=
2つの文字列が等しくない場合はtrueを返します.
[$a!=$b]はtrueを返します.
-z
文字列の長さ0はtrueを返します.
[-z$a]falseを返します
-n
文字列の長さが0でない場合はtrueを返します.
[-n'$a']はtrueを返します.
str
文字列が空でない場合はtrueを返します.
[$a]はtrueを返します
≪インスタンス|Instance|emdw≫
#!/bin/bash
a="abc"
b="efg"
if [ $a = $b ]
then
echo "$a = $b : a b"
else
echo "$a = $b: a b"
fi
if [ $a != $b ]
then
echo "$a != $b : a b"
else
echo "$a != $b: a b"
fi
if [ -z $a ]
then
echo "-z $a : 0"
else
echo "-z $a : 0"
fi
if [ -n "$a" ]
then
echo "-n $a : 0"
else
echo "-n $a : 0"
fi
if [ $a ]
then
echo "$a : "
else
echo "$a : "
fi
スクリプトを実行し、次のように出力します.
abc = efg: a b
abc != efg : a b
-z abc : 0
-n abc : 0
abc :
6.ファイルテスト演算子
ファイルテスト演算子は、Unixファイルのさまざまなプロパティを検出するために使用されます.
オペレータ
説明
例を引く
-b file
ファイルはブロックデバイスファイルでtrueを返します
[-b$file]falseを返します
-c file
ファイルは文字デバイスファイルでtrueを返します
[-c$file]falseを返します
-d file
ファイルはディレクトリがtrueを返す
[-d$file]falseを返します
-f file
ファイルが通常のファイルかどうかはtrueを返します.
[-f$file]はtrueを返します
-g file
ファイルはSGIDビットを設定してtrueを返す
[-g$file]falseを返します
-u file
ファイルはSUIDビットを設定してtrueを返します
[-u$file]falseを返します
-k file
ファイルにSticky Bitを設定してtrueを返します.
[-k$file]falseを返します
-p file
ファイルは有名なパイプでtrueを返します
[-p$file]falseを返します
-r file
ファイルが存在し、読み取り可能な戻りtrue
[-r$file]はtrueを返します.
-w file
ファイルが存在し、書き込み可能でtrueを返します.
[-w$file]はtrueを返します
-x file
ファイルが存在し、trueを返すことができます.
[-x$file]はtrueを返します
-s file
ファイルが空の場合はtrueを返します
[-s$file]はtrueを返します
-e file
ディレクトリを含むファイルが存在する場合はtrueを返します.
[-e$file]はtrueを返します
インスタンス変数fileは、ファイル「/var/www/runoob/test.sh」を表し、rwx権限を持つ100バイトのサイズです.
#!/bin/bash
file="/var/www/leon/test.sh"
if [ -r $file ]
then
echo " "
else
echo " "
fi
if [ -w $file ]
then
echo " "
else
echo " "
fi
if [ -x $file ]
then
echo " "
else
echo " "
fi
if [ -f $file ]
then
echo " "
else
echo " "
fi
if [ -d $file ]
then
echo " "
else
echo " "
fi
if [ -s $file ]
then
echo " "
else
echo " "
fi
if [ -e $file ]
then
echo " "
else
echo " "
fi
スクリプトを実行し、次のように出力します.