English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Shell は他のプログラミング言語と同様に、以下のような様々な演算子をサポートしています:
算数演算子
関係演算子
ブール演算子
文字演算子
ファイルテスト演算子
原生的 bash は簡単な数学演算をサポートしていませんが、awk や expr などの他のコマンドを使用して実現できます。expr は最も常用されます。
expr は式の計算ツールであり、このツールを使用することで式の評価操作を完了できます。
例えば、2つの数を足す(使用しているのは反引号 ` ではなく、単引号 ' です。):
#!/bin/bash val=`expr 2 + 2` echo "2つの数の和は : $val"
スクリプトを実行し、以下の結果を出力します:
2つの数の和は : 4
以下に注意点を2点示します:
式と演算子の間にはスペースが必要です。例えば、 2+2 これは間違っています。以下のように書く必要があります 2 + 2これは、私たちがよく知っているほとんどのプログラミング言語とは異なります。
完全な式は `` で囲まれなければなりません。この文字は一般的な単引号ではありません。Esc キーの下にあります。
以下の表に常用の算術演算子を示します。変数 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 ]。
算術演算子の例を以下に示します:
#!/bin/bash # 著者: 基礎チュートリアル # url:ja.oldtoolbag.com a=10 b=20 + $b` echo "a + b : $val" - $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 に等しくありません
注意:
積号(*前に反斜杠(\)を付ける必要があります;
if...then...fi は条件文であり、後で説明します。
MAC での shell の expr 语法は以下の通りです:$((表达式))、ここに表現にある "*" はエスケープシンボル "\" が必要ありません。
関係演算子は数字のみをサポートし、文字列はサポートしません。ただし、文字列の値が数字の場合を除きます。
以下に常用の関係演算子を示します、変数 a は 10、変数 b は 20:
演算子 | 説明 | 例 |
---|---|---|
-eq | 二つの数が等しいかどうかを検出し、はいの場合は true を返します。 | [ $a -eq $b ] 返り値 false。 |
-ne | 二つの数が異なるかどうかを検出し、異なる場合は 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。 |
関係演算子の例を以下に示します:
#!/bin/bash # author:基礎教程網 # url:ja.oldtoolbag.com 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 以下または等しい
以下に常用のブール演算子を示します、変数 a は 10、変数 b は 20:
演算子 | 説明 | 例 |
---|---|---|
! | 論理非演算子は、表現が true であれば false を返し、そうでない場合は true を返します。 | [ ! false ] 返回 true。 |
-o | 論理或演算子は、ある表現が true であれば true を返します。 | [ $a -lt 20 -o $b -gt 100 ] 返回 true。 |
-a | 論理和演算子は、両方の表現が true であれば true を返します。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
ブール演算子の例を以下に示します:
#!/bin/bash # 著者: 基礎チュートリアル # url:ja.oldtoolbag.com 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 を返します
以下に Shell の論理演算子を紹介します。変数 a は 10、変数 b は 20:
演算子 | 説明 | 例 |
---|---|---|
&& | 論理の AND | [[ $a -lt 100 && $b -gt 100 ]] は false を返します |
|| | 論理の OR | [[ $a -lt 100 || $b -gt 100 ]] は true を返します |
論理演算子の例は以下の通りです:
#!/bin/bash # author:基礎教程網 # url:ja.oldtoolbag.com 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 を返します
以下に一般的な文字演算子を挙げています。変数 a は "abc"、変数 b は "efg" と仮定します:
演算子 | 説明 | 例 |
---|---|---|
= | 二つの文字が同じかどうかを検出し、同じ場合は true を返します。 | [ $a = $b ] は false を返します。 |
!= | 二つの文字が異なるかどうかを検出し、異なる場合は true を返します。 | [ $a != $b ] は true を返します。 |
-z | 文字の長さが 0 かどうかを検出し、0 なら true を返します。 | [ -z $a ] は false を返します。 |
-n | 文字の長さが 0 でないかどうかを検出し、0 でない場合は true を返します。 | [ -n "$a" ] は true を返します。 |
$ | 文字が空かどうかを検出し、空でない場合は true を返します。 | [ $a ] は true を返します。 |
文字演算子の例は以下の通りです:
#!/bin/bash # author:基礎教程網 # url:ja.oldtoolbag.com 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 : 文字列が空でない
ファイルテスト演算子は 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。 |
-k file | ファイルが粘着位(Sticky Bit)が設定されているかどうかを確認し、設定されている場合は true を返します。 | [ -k $file ] 返回 false。 |
-p file | ファイルが有名パイプラインかどうかを確認し、有名パイプラインの場合は true を返します。 | [ -p $file ] 返回 false。 |
-u file | ファイルが SUID 位が設定されているかどうかを確認し、設定されている場合は true を返します。 | [ -u $file ] 返回 false。 |
-r file | ファイルが読み込めるとかどうかを確認し、読み込めるときは true を返します。 | [ -r $file ] 返回 true。 |
-w file | ファイルが書き込めるかどうかを確認し、書き込めるときは true を返します。 | [ -w $file ] 返回 true。 |
-x file | ファイルが実行可能かどうかを確認し、実行可能の場合は true を返します。 | [ -x $file ] 返回 true。 |
-s file | ファイルが空かどうか(ファイルサイズが0以上かどうか)を確認し、空でない場合は true を返します。 | [ -s $file ] 返回 true。 |
-e file | ファイル(ディレクトリを含む)が存在するかどうかを確認し、存在する場合は true を返します。 | [ -e $file ] 返回 true。 |
その他のチェックシンボル:
-S: ファイルがソケットであるかどうかを判断します。
-L: ファイルが存在し、シンボリックリンクであるかどうかを検出します。
#!/bin/bash # author:基礎教程網 # url:ja.oldtoolbag.com file="/var/www/w3codebox/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
スクリプトを実行し、以下の結果を出力します:
ファイルが読み取り可能です ファイルが書き込み可能です ファイルが実行可能です ファイルが通常ファイルです ファイルがディレクトリではありません ファイルが空ではありません ファイルが存在しています