はじめに
Bashスクリプトでは、数学と算術演算が不可欠です。さまざまな自動化タスクには、CPU温度を華氏に変換するなどの基本的な算術演算が必要です。 Bashでの数学演算の実装は単純で、非常に簡単に習得できます。
このガイドでは、Bashで基本的な数学をさまざまな方法で行う方法を説明しています。

前提条件
- コマンドライン/ターミナルへのアクセス。
- nanoやVi/Vimなどの例をコード化するためのテキストエディタ。
- Bashスクリプトの基本的な知識。
Bashスクリプティングで数学が必要な理由
数学はBashスクリプトの主な目的ではありませんが、基本的な計算を行う方法を知ることは、さまざまなユースケースに役立ちます。
一般的な使用例は次のとおりです。
- 数値の加算/減算/乗算/除算。
- 四捨五入します。
- 数値のインクリメントとデクリメント。
- 変換単位。
- 浮動小数点の計算。
- パーセンテージを見つける。
- 異なる基数(2進数、8進数、または16進数)での作業。
自動化タスクに応じて、Bashスクリプトの基本的な数学と算術は、迅速な計算を実行するのに役立ち、目的の形式で即座に結果を生成します。
Bashの数学コマンドとメソッド
一部のLinuxコマンドでは、基本的な計算と高度な計算をすぐに実行できます。このセクションでは、各メソッドの基本的な数学の例を示します。
算術拡張
Bashで数学を行うための好ましい方法は、シェル算術展開を使用することです。組み込みの機能は数式を評価し、結果を返します。算術展開の構文は次のとおりです。
$((expression))
構文は次のとおりです。
- 複合表記
(())
式を評価します。 - 変数演算子
$
結果を保存します。
たとえば、2つの数値を追加して、結果をエコーします。
echo $((2+3))

算術展開表記は、Bashスクリプトを操作する場合に推奨される方法です。表記は、 if
と一緒によく見られます Bashのステートメントとforループ。
awkコマンド
awkコマンドは、パターン式のセレクターとして機能します。たとえば、 awk
を使用して加算を実行するには コマンドを実行するには、次のステートメント例を使用します。
awk 'BEGIN { x = 2; y = 3; print "x + y = "(x+y) }'

変数の場合x =2
およびy =3
、出力は x + y =5
を出力します コンソールに。
bcコマンド
bc
コマンド( b の略) asic c alculator)は、bc言語をレンダリングするコマンドラインユーティリティです。プログラムは対話型プログラムとして実行されるか、標準入力を使用して任意精度の演算を実行します。
方程式を標準入力からコマンドにパイプして、結果をフェッチします。例:
echo "2+3" | bc

出力には計算結果が出力されます。
dcコマンド
dc
コマンド( d の略) esk c alculator)は、逆ポーランド記法をサポートする計算ユーティリティです。プログラムは標準入力を受け取り、無制限の精度の演算をサポートします。
標準の入力方程式をコマンドにパイプして、結果をフェッチします。例:
echo "2 3 + p" | dc

p
方程式では、印刷信号を dc
に送信します コマンド。
コマンドを宣言する
Bash宣言コマンドを使用すると、整数計算が可能になります。 宣言
を使用するには 計算には、 -i
を追加します オプション。例:
declare -i x=2 y=3 z=x+y
各変数をエコーして結果を確認します:
echo $x + $y = $z

出力は、各変数をコンソールに出力します。
exprコマンド
expr
commandは、整数演算を評価するための従来のコマンドラインユーティリティです。例expr
コマンドは次のようになります:
expr 2 + 3

数字と演算記号をスペースで区切り、コマンドを実行して計算結果を確認します。
factorコマンド
ファクター
commandは、任意の正の整数の因数を出力するコマンドラインユーティリティであり、結果は素数に因数分解されます。
たとえば、数値100の因数を出力するには、次のコマンドを実行します。
factor 100

出力は因数分解された数を出力します。
コマンドを送信
Bash letコマンドは、さまざまな算術演算、ビット演算、および論理演算を実行します。組み込みコマンドは整数でのみ機能します。次の例は、 let
を示しています コマンド構文:
let x=2+3 | echo $x

出力は結果を出力します。
テストコマンド
テスト
Linuxのコマンドは条件式を評価し、多くの場合Bashifステートメントとペアになります。テスト構文には2つのバリエーションがあります。
test 2 -gt 3; echo $?

または代わりに:
[ 2 -gt 3 ]; echo $?

テスト
コマンドは、2つが( -gt
より大きいかどうかを評価します ) 三。式がtrueの場合、出力はゼロです( 0
)、または1つ( 1
)falseの場合。
Bash算術演算子
Bashは、さまざまな計算と評価のための幅広い算術演算子を提供します。オペレーターはlet
を操作します 、宣言
、および算術展開。
以下は、Bash算術演算子とその機能を説明するクイックリファレンステーブルです。
構文 | 説明 |
---|---|
++ x 、 x ++ | インクリメント前とインクリメント後。 |
-x 、 x- | デクリメント前とデクリメント後。 |
+ 、 - 、 * 、 / | 足し算、引き算、掛け算、割り算。 |
% 、 ** (または ^ ) | モジュロ(剰余)とべき乗。 |
&& 、 || 、 ! | 論理積、論理積、および否定。 |
& 、 | 、 ^ 、 〜 | ビット単位のAND、OR、XOR、および否定。 |
<= 、 < 、 > 、 => | 比較演算子以下、以下、以上、以上。 |
== 、 != | 等式および不等式の比較演算子。 |
= | 代入演算子。他の算術演算子と組み合わせます。 |
Bashで数学を行う方法
Bashは、問題のタイプに応じて、数学計算を実行するさまざまな方法を提供します。
以下は、Bashの数学機能またはコマンドを解決策として使用するいくつかの一般的な問題の例です。ほとんどの例では、Bash算術展開表記を使用しています。このセクションでは、一般的なBashの数学エラーとその解決方法についても説明します。
整数の数学
算術展開表記は、整数を操作するときに使用および操作するのが最も簡単です。たとえば、変数を使用して式を作成し、結果をすぐに計算します。
echo $((x=2, y=3, x+y))

複数の式を評価するには、複合表記を使用し、各計算を変数に格納して、結果をエコーします。例:
((x=2, y=3, a=x+y, b=x*y, c=x**y)); echo $a, $b, $c

分割するときは、次の点に注意してください。
1.ゼロ(0)による除算は不可能であり、エラーをスローします。

2. Bash算術展開は、浮動小数点演算をサポートしていません。この場合に除算しようとすると、出力にはゼロ(0)が表示されます。

整数除算の結果は整数でなければなりません。
インクリメントとデクリメント
Bash算術展開は、Cスタイルの整数のインクリメントとデクリメントを使用します。インクリメントまたはデクリメントするための演算子は、変数の前または後のいずれかであり、異なる動作を生成します。
演算子が変数の前にある場合( ++ x
または-x
)、インクリメントまたはデクリメントは値の割り当ての前に発生します。事前インクリメントがどのように機能するかを確認するには、次の行を実行します。
number=1
echo $((++number))

変数が増加し、新しい値がすぐに利用可能になります。
演算子が変数の後にある場合( x ++
またはx-
)、インクリメントまたはデクリメントは値の割り当て後に発生します。ポストインクリメントがどのように機能するかを確認するには、次のコマンドを実行します。
number=1
echo $((number++))
echo $number

変数は同じままで、次の使用で増加します。
浮動小数点演算
Bash算術展開は浮動小数点演算をサポートしていませんが、そのような計算を実行する方法は他にもあります。以下は、ほとんどのLinuxシステムで使用可能なコマンドまたはプログラミング言語を使用した4つの例です。
1. awk
を使用する 小数点以下6桁まで:
awk 'BEGIN { x = 2.3; y = 3.2; print "x * y = "(x * y) }'

2. bc
を使用する -l
を使用 小数点以下20桁までのフラグ:
echo "2.3 * 3.2" | bc -l

3.小数点以下20桁までのPerlの使用:
perl -e 'print 2.3*3.2'

Perlは多くの場合Linuxシステムにプリインストールされています。
4. printfと算術展開を使用して、分数を小数に変換します。
printf %.<precision>f "$((10**<multiplier> * <fraction>))e-<multiplier>"
精度は小数点以下の桁数を決定しますが、乗数は10の累乗です。数値は乗数よりも小さくする必要があります。それ以外の場合、数式は結果に末尾のゼロを置きます。
たとえば、1/3を精度2の小数に変換します。
printf %.2f "$((10**3 * 1/3))e-3"

正確な計算にはこの方法を避け、小数点以下の桁数が少ない場合にのみ使用してください。
パーセンテージと丸めの計算
以下は、Bashでパーセンテージを計算する2つの方法です。
1. printf
を使用します 算術展開あり。
printf %.2f "$((10**4 * part/total))e-4"%
たとえば、71から40パーセントを計算します。
printf %.2f%% "$((10**4 * 40/71))e-4"%

精度は小数点以下2桁に制限されており、答えは常に切り捨てられます。
2. awk
を使用します printf
を使用 精度を高めるために:
awk 'BEGIN { printf "%.2f%%", (part/total*100) }'
たとえば、次のように71から40パーセントを計算します。
awk 'BEGIN { printf "%.2f%%", (40/71*100) }'

小数点以下第3位が5より大きい場合、答えは切り上げられ、精度が向上します。
シェルで階乗を見つける
任意の数の階乗を計算するには、再帰的なBash関数を使用します。
少数の場合、Bash算術展開が適切に機能します:
factorial () {
if (($1 > 1))
then
echo $(( $( factorial $(($1 - 1)) ) * $1 ))
else
echo 1
return
fi
}
階乗の数値を確認するには、次の構文を使用します。
factorial 5

この方法は遅く、精度が制限されています(階乗20まで)。
より高い精度、より速い結果、およびより大きな数値を得るには、 bc
を使用してください 指図。例:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1}
factorial(<number>)' | bc
を置き換えます 計算する階乗数を使用します。たとえば、50の階乗を見つけるには、次を使用します。
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1} factorial(50)' | bc

出力は計算結果を端末に出力します。
Bash電卓関数の作成
次のコードを使用して、単純なBash計算関数を作成します。
calculate() { printf "%s\n" "[email protected]" | bc -l; }

この関数はユーザー入力を受け取り、方程式を bc
にパイプします 指図。
または、プログラムの使用を避けるために、関数でBash算術展開を使用します。
calculate() { echo $(("[email protected]")); }

算術展開の制限に注意してください。この関数では浮動小数点演算は使用できません。
関数を.bashrcに保存します シェルで常に機能を使用できるようにするファイル。
さまざまな算術ベースの使用
デフォルトでは、Bash算術展開は10進数を使用します。番号ベースを変更するには、次の形式を使用します。
base#number
ベース 2から64までの任意の整数です。
たとえば、バイナリ(基数2)の計算を行うには、次を使用します。
echo $((2#1010+2#1010))

8進数(基数8)の計算では、エイリアスとして0プレフィックスを使用します。例:
echo $((010+010))

16進数(基数16)の計算では、0xを基数プレフィックスとして使用できます。例:
echo $((0xA+0xA))

出力は、計算の結果を10進数で出力します。
単位の変換
単位を変換する簡単なBashスクリプトを作成します:
1. Vimなどのテキストエディタを開き、 convert.shを作成します。 脚本。例:
vim convert.sh
2.次のコードを貼り付けます:
#!/bin/bash
## Program for feet and inches conversion
echo "Enter a number to be converted:"
read number
echo $number feet to inches:
echo "$number*12" | bc -l
echo $number inches to feet:
echo "$number/12" | bc -l
プログラムはBash読み取りを使用してユーザー入力を取得し、フィートからインチへ、およびインチからフィートへの変換を計算します。
3.スクリプトを保存して閉じます:
:wq
4.次のコマンドでBashスクリプトを実行します:
. convert.sh

数値を入力して結果を確認してください。さまざまな変換には、適切な変換式を使用してください。
「bashエラー:ベースに対して値が大きすぎます」を解決する
異なる基数で作業する場合は、基数の制限内にとどまります。たとえば、2進数は0と1を使用して数値を定義します。
echo $((2#2+2#2))
2#2
を使用しようとしています 数値はエラーを出力します:
bash: 2#2: value too great for base (error token is "2#2")

数値は、バイナリで使用するための正しい形式ではありません。エラーを解決するには、数値を2進数に変換して、計算を正しく実行します。
echo $((2#10+2#10))
2進数10
2
です 10進数で。
「構文エラー:無効な算術演算子」の解決
Bash算術展開表記は、整数計算でのみ機能します。次に、2つの浮動小数点数を追加してみます。
echo $((2.1+2.1))
コマンドはエラーを出力します:
bash: 2.1+2.1: syntax error: invalid arithmetic operator (error token is ".1+2.1")

エラーを解決するには、通常の整数演算または別の方法を使用して方程式を計算します。
「bashエラー:整数式が必要です」を解決する
2つの数値を比較する場合、テスト
コマンドには整数が必要です。たとえば、次のコマンドを試してください。
[ 1 -gt 1.5 ]
出力はエラーを出力します:
bash: [: 1.5: integer expression expected

整数値を比較してエラーを解決します。