1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

Shell() は整数に対する数学演算を実装しています。

2022-02-07 21:44:07

二重括弧(( ))は、整数の計算を行うためのBash Shellの特殊コマンドです。効率的で柔軟性があり、企業の業務ではよく使われるコマンドである。

注意:(( )は整数演算のみで、分数(浮動小数点)演算や文字列演算は行えません。分数演算には、後述のbcコマンドを使用することができます。

シェル(( ))の使用法

二重括弧(( ))の構文形式は次のとおりです。
((expression))

平たく言えば、((and))の間に数式を入れるということです。

式は1つでも、カンマで区切られた複数の式でも構いません。複数の式の場合、最後の式の値が(( )コマンド全体の結果になります。

(( ))コマンドの結果を得るために$を使うことができますが、これは$を使って変数の値を得るのと同じです。

表1:(( )の使用方法)

<テーブル 演算子/演算子コマンド 説明 ((a=10+66)
((b=a-15))
((c=a+b)) この書き方だと、計算が終わった後に変数に値を代入することができる。例として、((b=a-15))はa-15の結果を変数cに代入しています。
なお、変数の前に$を付ける必要はなく、(( )で自動的に変数名が解決されます。 a=$((10+66)
b=$((a-15))
c=$((a+b)) (( ))の前に$記号を付けると、(( )コマンドの結果、つまり式全体の値を得ることができます。たとえば、c=$((a+b))とすると、a+b式の結果が変数cに代入されます。
c=((a+b)) のように書くのは間違いです。$を付けないと式の結果が得られません。 ((a>7 && b==c))) (( )は論理演算も可能で、if文の中でよく使われます。 echo $((a+10)) 式の結果をすぐに出力する必要があるときは、(( )の前に$記号をつければよい。 ((a=3+5, b=a+10)) 複数の式について同時に計算する。

変数を$の接頭辞を付けずに(( )で使用すると、自動的に変数名が解決されるため、コードがすっきりし、プログラマーの書き方の癖に合わせることができます。

シェル(())のデモ例

[例1】 「( )」を使った簡単な数値計算。

[jb51.net]$ echo $((1+1))
2
[jb51.net]$ echo $((6-3))
3
[jb51.net]$ i=5
[jb51.net]$ ((i=i*2)) # can be abbreviated to ((i*=2)).
[jb51.net]$ echo $i # Add $ when using echo to output the result of a variable.
10


[例2】「()」を使って、少し複雑な積分演算を行う。

[jb51.net]$ ((a=1+2**3-4%3))
[c.biancheng.net]$ echo $a
8
[jb51.net]$ b=$((1+2**3-4%3)) # The result is assigned to the variable after the operation, and the variable is placed outside the parentheses.
[jb51.net]$ echo $b
8
[jb51.net]$ echo $((1+2**3-4%3)) # You can also output the result of the expression directly, being careful not to drop the $ sign.
8
[jb51.net]$ a=$((100*(100+1)/2)) # Use the formula to calculate the sum of 1+2+3+... +100 the sum.
[jb51.net]$ echo $a
5050
[jb51.net]$ echo $((100*(100+1)/2)) # You can also output the result of the expression directly.
5050


[例3】論理演算に「( )」を使用する。

[jb51.net]$ echo $((3<8)) #3<8 holds, therefore, the output is 1, 1 means true
1
[jb51.net]$ echo $((8<3)) The result of #8<3 is not valid, therefore, 0 is output, 0 means false.
0
[jb51.net]$ echo $((8==8)) # Determine if equal.
1
[jb51.net]$ if ((8>7&&5==5))
> then
> echo yes
> fi
yes


最後に、8>7が成立し、5==5が成立していればyesとなるように整形した簡単なif文があります。明らかに、両方の条件が成立しているので、yesが出力されます。

[例4】 (( ))を使った自己増分(++)と自己減分(--)の演算。)

[jb51.net]$ a=10
[jb51.net]$ echo $((a++)) # If ++ is after a, then the value of a is output when the whole expression is output, because a is 10, so the value of the expression is 10.
10
[jb51.net]$ echo $a # After executing the above expression, because there is a++, a will increment itself by 1, so the value of a will be output as 11.
11
[jb51.net]$ a=11
[jb51.net]$ echo $((a--)) # If -- is after a, then when the whole expression is output, the value of a is output because a is 11, so the value of the expression is 11.
11
[jb51.net]$ echo $a # After executing the above expression, because there is a --, a will be automatically subtracted by 1, so a is 10.
10
[jb51.net]$ a=10
[jb51.net]$ echo $((--a)) # If -- precedes a, then the whole expression is output with a self-incrementing or self-subtracting calculation first, because a is 10 and is to be self-subtracting, so the value of the expression is 9.
9
[jb51.net]$ echo $a #After executing the above expression, a is self-subtracting by 1, so a is 9.
9
[jb51.net]$ echo $((++a)) # If ++ is in front of a, when outputting the whole expression, first do the self-increment or self-subtraction calculation, because a is 9 and to be self-incremented by 1, so output 10.
10
[jb51.net]$ echo $a #After executing the above expression, a is self-incrementing by 1, so a is 10.
10


このチュートリアルは、読者が基本的なプログラミングのスキルを持っていることを前提としています。また、読者はプリセルフインクリメント(前サブクリメント)とポストセルフインクリメント(後サブクリメント)の違いをよく理解していると思いますので、ここでは簡単な説明以外は省略します。

  • echo $((a++)) と echo $((a--)) コマンドが式全体を出力すると、出力は a の値になります。式を実行した後、a に対して ++ と -- の演算が行われます。
  • echo $((++a)) と echo $((--a)) コマンドは、式全体を ++, -- として出力し、さらに式の値を a の値として出力します。

[例5】 ( ) を使って、複数の式を一度に計算する。

[jb51.net]$ ((a=3+5, b=a+10)) # Calculate the first expression first, then the second expression
[jb51.net]$ echo $a $b
8 18
[jb51.net]$ c=$((4+8, a+b)) # use the result of the last expression as the result of the entire (()) command
[jb51.net]$ echo $c
26

この記事は、Shell(())の整数の数学的操作を達成するために導入され、より関連するShell(())の整数の操作の内容は、スクリプトハウスの以前の記事を検索してくださいまたは次の関連記事を閲覧し続けるあなたは、今後より多くのスクリプトハウスをサポートしています願っています!この記事では、整数の演算を達成するために、Shell(())の整数の操作の内容を紹介します。