Bash Mathを実行しましょう!
bashスクリプトを作成しているときに、残りのディスクスペース、ファイルサイズ、パスワードの有効期限、ホストの数、ネットワーク帯域幅などを決定するための算術計算の結果を把握したい場合がよくあります。
bash初心者シリーズのこの章では、bash演算子を使用してさまざまな算術計算を実行する方法を学習します。
記憶をリフレッシュするために、bashの算術演算子は次のとおりです。
オペレーター | 説明 |
---|---|
+ | 追加 |
- | 減算 |
* | 乗算 |
/ | 整数除算(10進数なし) |
% | モジュラス除算(余りのみを与える) |
** | べき乗(xのy乗) |
bashスクリプトで加算と減算を実行する
addition.shという名前のbashスクリプトを作成しましょう これにより、2つのファイルサイズ(バイト単位)が追加され、出力が表示されます。
これまでに、bashスクリプトの引数に精通している必要があります。カットコマンドとデュコマンドにも精通していることを願っています。
duコマンドは、に沿ったファイルのサイズを提供します。出力には、ファイルサイズとファイル名の両方が含まれます。ここで、cutコマンドを使用して、出力から最初の列(つまり、ファイルサイズ)を抽出します。 duコマンドの出力は、パイプリダイレクトを使用してcutコマンドに渡されます。
スクリプトは次のとおりです。
#!/bin/bash
fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)
echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"
total=$(($fs1 + $fs2))
echo "Total size is: $total"
2つのファイル名を引数としてスクリプトに渡すことに注意してください。たとえば、ここではスクリプトを実行して、2つのファイル/etc/passwd
を渡します。 および/etc/group
引数として:
[email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860
addition.shの最も重要な行 スクリプトは次のとおりです:
total=$(($fs1 + $fs2))
+演算子を使用して2つの数値$fs1と$fs2を追加したところ。算術式を評価するには、次のように二重括弧で囲む必要があることにも注意してください。
$((arithmetic-expression))
マイナス演算子(-)を使用して減算することもできます。たとえば、次のステートメントのサブ変数の値は7になります。
sub=$((10-3))
bashスクリプトで乗算と除算を実行する
giga2mega.shという名前のbashスクリプトを作成しましょう ギガバイト(GB)をメガバイト(MB)に変換します:
#!/bin/bash
GIGA=$1
MEGA=$(($GIGA * 1024))
echo "$GIGA GB is equal to $MEGA MB"
次に、スクリプトを実行して、4ギガバイトにメガバイトがいくつあるかを調べます。
[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB
ここでは、乗算(*)演算子を使用して、ギガバイト数に1024を掛け、メガバイトに相当する値を取得しました。
MEGA=$(($GIGA * 1024))
このスクリプトに機能を追加して、ギガバイト(GB)をキロバイト(KB)に変換するのは簡単です。
KILO=$(($GIGA * 1024 * 1024))
練習問題としてギガバイトをバイトに変換させていただきます!
除算演算子(/)を使用して2つの数値を除算することもできます。たとえば、次のステートメントのdiv変数の値は5と評価されます。
div=$((20 / 4))
これは整数除算であるため、すべての分数が失われることに注意してください。たとえば、5を2で割ると、もちろん2が得られますが、これは正しくありません。
[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2
10進数の出力を取得するには; bc
を利用できます 指図。たとえば、bc
で5を2で割る コマンドの場合、次のステートメントを使用できます:
echo "5/2" | bc -l
2.50000000000000000000
bc
でも他の演算子を使用できることに注意してください 10進数を扱うときはいつでもコマンド:

電力と剰余の使用(モジュロ)
電力計算機を作ろう! power.shという名前のスクリプトを作成します 2つの数字を受け入れますa およびb (引数として) aの結果が表示されます bの累乗 :
#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"
a の結果を計算するためにべき乗演算子(**)を使用していることに注意してください bの累乗 。
スクリプトを数回実行して、正しい答えが得られることを確認しましょう。
[email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16
モジュロ演算子(%)を使用して、整数の剰余を計算することもできます。たとえば、 remの値 次のステートメントの変数は2と評価されます:
rem=$((17%5))
ここでの残りは2です。これは、5が17に3回入り、2が残っているためです!
練習時間:DegreeConverterのbashスクリプトを作成する
c2f.sh という名前のスクリプトを作成して、このチュートリアルを締めくくりましょう。 次の式を使用して、摂氏度を華氏度に変換します。
F = C x (9/5) + 32
これは、このbashチュートリアルで学んだばかりの新しいことを試すための良い演習になります。
解決策は次のとおりです(同じ結果を得るにはいくつかの方法があります):
#!/bin/bash
C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)
echo "$C degrees Celsius is equal to $F degrees Fahrenheit."
bcを使用しました コマンドを処理しているのは、小数点以下2桁で出力を表示するために、「scale=2」も使用したためです。
スクリプトを数回実行して、正しい結果が出力されていることを確認しましょう。
[email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.
完全!これで、このチュートリアルは終了です。この章のbash演習セットをダウンロードして、学んだことを練習してください。
Bash第5章練習問題この章で学んだことを練習するための問題とその解決策Bash-Chapter-5-Practice-Questions-Linux-Handbook.pdf32KB
文字列の操作方法を学習するため、bashを使用して数学を楽しんでいただき、bash初心者シリーズの次のチュートリアルにご期待ください。