GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Bash-Anfängerserie Nr. 5:Verwenden von arithmetischen Operatoren in Bash-Skripten

Lass uns ein bisschen Bash Math machen!

Beim Schreiben Ihrer Bash-Skripte möchten Sie häufig das Ergebnis einer arithmetischen Berechnung ermitteln, um den verbleibenden Speicherplatz, die Dateigröße, das Ablaufdatum des Kennworts, die Anzahl der Hosts, die Netzwerkbandbreite usw. zu bestimmen.

In diesem Kapitel der Bash-Anfängerserie lernen Sie, Bash-Operatoren zu verwenden, um verschiedene arithmetische Berechnungen durchzuführen.

Um Ihr Gedächtnis aufzufrischen, hier sind die arithmetischen Operatoren in bash:

Operator Beschreibung
+ Zusatz
- Subtraktion
* Multiplikation
/ Integer-Division (ohne Dezimalzahlen)
% Moduldivision (ergibt nur Rest)
** Potenzierung (x hoch y)

Durchführen von Additionen und Subtraktionen in Bash-Skripten

Lassen Sie uns ein Bash-Skript mit dem Namen addition.sh erstellen das fügt einfach zwei Dateigrößen (in Byte) hinzu und zeigt die Ausgabe an.

Sie müssen inzwischen mit Argumenten in Bash-Skripten vertraut sein. Ich hoffe, Sie sind auch mit den Befehlen cut und du vertraut.

Der du-Befehl gibt Ihnen die Größe der Datei zusammen. Die Ausgabe enthält sowohl die Dateigröße als auch den Dateinamen. Hier wird der cut-Befehl verwendet, um die erste Spalte (d. h. die Dateigröße) aus der Ausgabe zu extrahieren. Die Ausgabe des du-Befehls wird unter Verwendung einer Pipe-Umleitung an den cut-Befehl übergeben.

Hier ist das Skript:

#!/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"

Beachten Sie, dass Sie die beiden Dateinamen als Argumente an das Skript übergeben. Hier führe ich beispielsweise das Skript aus und übergebe die beiden Dateien /etc/passwd und /etc/group als Argumente:

[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

Die wichtigste Zeile in der addition.sh Skript ist:

total=$(($fs1 + $fs2))

Wobei Sie den Operator + verwendet haben, um die beiden Zahlen $fs1 und $fs2 zu addieren. Beachten Sie auch, dass Sie zur Auswertung eines arithmetischen Ausdrucks wie folgt zwischen doppelte Klammern setzen müssen:

$((arithmetic-expression))

Sie können auch den Minusoperator (-) zur Subtraktion verwenden. Der Wert der Untervariablen in der folgenden Anweisung ergibt beispielsweise sieben:

sub=$((10-3))

Multiplikation und Division in Bash-Skripten ausführen

Lassen Sie uns ein Bash-Skript mit dem Namen giga2mega.sh erstellen das konvertiert Gigabyte (GB) in Megabyte (MB):

#!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"

Lassen Sie uns nun das Skript ausführen, um herauszufinden, wie viele Megabyte in vier Gigabyte enthalten sind:

[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB

Hier habe ich den Multiplikationsoperator (*) verwendet, um die Anzahl der Gigabyte mit 1024 zu multiplizieren, um das Megabyte-Äquivalent zu erhalten:

MEGA=$(($GIGA * 1024))

Es ist einfach, diesem Skript weitere Funktionen hinzuzufügen, um Gigabyte (GB) in Kilobyte (KB) umzuwandeln:

KILO=$(($GIGA * 1024 * 1024))

Als Übungsübung lasse ich Sie Gigabytes in Bytes konvertieren!

Sie können auch den Divisionsoperator (/) verwenden, um zwei Zahlen zu dividieren. Beispielsweise wird der Wert der div-Variablen in der folgenden Anweisung zu fünf ausgewertet:

div=$((20 / 4))

Beachten Sie, dass dies eine ganzzahlige Division ist und daher alle Brüche verloren gehen. Wenn Sie beispielsweise 5 durch 2 teilen, erhalten Sie 2, was natürlich falsch ist:

[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2

Um eine Dezimalausgabe zu erhalten; Sie können den bc verwenden Befehl. Zum Beispiel, um 5 durch 2 mit dem bc zu teilen Befehl können Sie die folgende Anweisung verwenden:

echo "5/2" | bc -l
2.50000000000000000000

Beachten Sie, dass Sie mit bc auch andere Operatoren verwenden können Befehl, wenn es um Dezimalzahlen geht:

Verwendung von Potenz und Rest (modulo)

Lassen Sie uns einen Stromrechner erstellen! Ich werde ein Skript mit dem Namen power.sh erstellen das akzeptiert zwei Zahlen a und b (als Argumente) und es wird das Ergebnis von a angezeigt potenziert mit b :

#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"

Beachten Sie, dass ich den Potenzierungsoperator (**) verwende, um das Ergebnis von a zu berechnen potenziert mit b .

Lassen Sie uns das Skript ein paar Mal ausführen, um sicherzustellen, dass es die richtigen Antworten liefert:

[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

Sie können auch den Modulo-Operator (%) verwenden, um ganzzahlige Reste zu berechnen. Zum Beispiel der Wert von rem Die Variable in der folgenden Anweisung ergibt 2:

rem=$((17%5))

Der Rest hier ist 2, weil 5 dreimal in 17 geht, und zwei bleibt!

Übungszeit:Erstellen Sie ein Degree-Converter-Bash-Skript

Lassen Sie uns dieses Tutorial abschließen, indem wir ein Skript mit dem Namen c2f.sh erstellen das wird Grad Celsius in Grad Fahrenheit umwandeln, indem die folgende Gleichung verwendet wird:

F = C x (9/5) + 32

Dies ist eine gute Übung, um die neuen Dinge auszuprobieren, die Sie gerade in diesem Bash-Tutorial gelernt haben.

Hier ist eine Lösung (es könnte mehrere Möglichkeiten geben, dasselbe Ergebnis zu erzielen):

#!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."

Ich habe das bc verwendet Befehl, weil wir es mit Dezimalstellen zu tun haben und ich auch "scale=2" verwendet habe, um die Ausgabe in zwei Dezimalstellen anzuzeigen.

Lassen Sie uns das Skript ein paar Mal ausführen, um sicherzustellen, dass es die richtigen Ergebnisse ausgibt:

[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.

Perfekt! Damit sind wir am Ende dieses Tutorials angelangt. Üben Sie, was Sie gelernt haben, indem Sie das Bash-Übungsset dieses Kapitels herunterladen.

Bash-Kapitel-5-ÜbungsfragenProbleme und deren Lösung zum Üben des gerade Gelernten in diesem KapitelBash-Kapitel-5-Übungsfragen-Linux-Handbuch.pdf32 KB

Ich hoffe, es hat Ihnen Spaß gemacht, mit Bash zu rechnen, und seien Sie gespannt auf das nächste Tutorial in der Bash-Anfängerserie, in dem Sie lernen, wie man Zeichenfolgen manipuliert!


Linux
  1. Bash-Scripting(I)

  2. Verwenden des Linux-Basisnamenbefehls in Bash-Skripten

  3. So ersetzen Sie Leerzeichen in Dateinamen mit einem Bash-Skript

  4. Mtime einer bestimmten Datei mit Bash abrufen?

  5. Alle Ausgaben mit Bash unter Linux in eine Datei umleiten?

Bash-Scripting(III)

Bash Beginner Series #2:Variables in Bash Shell Scripting verstehen

Bash-Anfängerserie Nr. 4:Verwenden von Arrays in Bash

Bash-Anfängerserie Nr. 3:Übergabe von Argumenten an Bash-Skripte

Bash-Anfängerserie Nr. 6:Zeichenfolgenoperationen in Bash

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash