Einführung
Mathematische und arithmetische Operationen sind beim Bash-Scripting unerlässlich. Verschiedene Automatisierungsaufgaben erfordern grundlegende Rechenoperationen, wie z. B. die Umrechnung der CPU-Temperatur in Fahrenheit. Die Implementierung mathematischer Operationen in Bash ist einfach und sehr leicht zu erlernen.
Dieser Leitfaden zeigt Ihnen, wie Sie grundlegende Mathematik in Bash auf verschiedene Arten ausführen können.
Voraussetzungen
- Zugriff auf die Befehlszeile/das Terminal.
- Ein Texteditor zum Codieren von Beispielen wie nano oder Vi/Vim.
- Grundkenntnisse der Bash-Skripterstellung.
Warum brauchen Sie Mathematik in Bash-Skripten?
Obwohl Mathematik nicht der Hauptzweck von Bash-Skripten ist, ist es für verschiedene Anwendungsfälle hilfreich, zu wissen, wie grundlegende Berechnungen durchgeführt werden.
Häufige Anwendungsfälle sind:
- Zahlen addieren/subtrahieren/multiplizieren/dividieren.
- Zahlen runden.
- Inkrementieren und Dekrementieren von Zahlen.
- Einheiten umrechnen.
- Gleitkommaberechnungen.
- Prozentsätze finden.
- Arbeiten mit verschiedenen Zahlenbasen (binär, oktal oder hexadezimal).
Abhängig von der Automatisierungsaufgabe helfen grundlegende Mathematik und Arithmetik in Bash-Skripten bei der Durchführung einer schnellen Berechnung, die sofortige Ergebnisse im gewünschten Format liefert.
Bash Math-Befehle und -Methoden
Einige Linux-Befehle ermöglichen die sofortige Durchführung grundlegender und erweiterter Berechnungen. Dieser Abschnitt zeigt grundlegende mathematische Beispiele für jede Methode.
Arithmetische Erweiterung
Die bevorzugte Art, in Bash zu rechnen, ist die Verwendung von Shell-Arithmetikerweiterungen. Die integrierte Funktion wertet mathematische Ausdrücke aus und gibt das Ergebnis zurück. Die Syntax für arithmetische Erweiterungen lautet:
$((expression))
Die Syntax besteht aus:
- Zusammengesetzte Notation
(())
die den Ausdruck auswertet. - Der Variablenoperator
$
um das Ergebnis zu speichern.
Fügen Sie beispielsweise zwei Zahlen hinzu und wiederholen Sie das Ergebnis:
echo $((2+3))
Die arithmetische Erweiterungsnotation ist die bevorzugte Methode bei der Arbeit mit Bash-Skripten. Die Schreibweise wird oft zusammen mit if
gesehen -Anweisungen und for-Schleifen in Bash.
awk-Befehl
Der Befehl awk fungiert als Selektor für Musterausdrücke. Zum Beispiel, um eine Addition mit dem awk
durchzuführen verwenden Sie die folgende Beispielanweisung:
awk 'BEGIN { x = 2; y = 3; print "x + y = "(x+y) }'
Für Variablen x = 2
und y = 3
, gibt die Ausgabe x + y = 5
aus zur Konsole.
bc-Befehl
Der bc
Befehl (kurz für b asic c alculator) ist ein Befehlszeilendienstprogramm, das die Sprache bc rendert. Das Programm läuft als interaktives Programm oder verwendet Standardeingaben, um Arithmetik mit beliebiger Genauigkeit auszuführen.
Leiten Sie eine Gleichung aus der Standardeingabe in den Befehl, um Ergebnisse abzurufen. Zum Beispiel:
echo "2+3" | bc
Die Ausgabe gibt das Berechnungsergebnis aus.
dc-Befehl
Der dc
Befehl (kurz für d esk c alculator) ist ein Taschenrechner-Dienstprogramm, das die umgekehrte polnische Notation unterstützt. Das Programm akzeptiert Standardeingaben und unterstützt Arithmetik mit unbegrenzter Genauigkeit.
Leiten Sie eine Standardeingabegleichung in den Befehl, um das Ergebnis abzurufen. Zum Beispiel:
echo "2 3 + p" | dc
Das p
in der Gleichung sendet das Drucksignal an dc
Befehl.
Befehl deklarieren
Der Bash-Declare-Befehl ermöglicht ganzzahlige Berechnungen. Um declare
zu verwenden Fügen Sie für Berechnungen das -i
hinzu Möglichkeit. Zum Beispiel:
declare -i x=2 y=3 z=x+y
Wiederholen Sie jede Variable, um die Ergebnisse anzuzeigen:
echo $x + $y = $z
Die Ausgabe gibt jede Variable an die Konsole aus.
expr-Befehl
Der expr
command ist ein älteres Befehlszeilendienstprogramm zum Auswerten von Integer-Arithmetik. Ein Beispiel expr
Befehl sieht wie folgt aus:
expr 2 + 3
Trennen Sie Zahlen und das Operationszeichen durch Leerzeichen und führen Sie den Befehl aus, um das Berechnungsergebnis anzuzeigen.
Faktor-Befehl
Der factor
command ist ein Befehlszeilenprogramm, das die Faktoren für jede positive Ganzzahl ausgibt und das Ergebnis in Primzahlen zerlegt.
Um beispielsweise die Faktoren der Zahl 100 auszugeben, führen Sie Folgendes aus:
factor 100
Die Ausgabe gibt die faktorisierte Zahl aus.
kommandieren lassen
Der let-Befehl der Bash führt verschiedene arithmetische, bitweise und logische Operationen durch. Der eingebaute Befehl funktioniert nur mit ganzen Zahlen. Das folgende Beispiel demonstriert let
Befehlssyntax:
let x=2+3 | echo $x
Die Ausgabe gibt die Ergebnisse aus.
test-Befehl
Der test
Der Befehl in Linux wertet bedingte Ausdrücke aus und paart sich oft mit der if-Anweisung von Bash. Es gibt zwei Varianten für die Testsyntax:
test 2 -gt 3; echo $?
Oder alternativ:
[ 2 -gt 3 ]; echo $?
Der test
Der Befehl wertet aus, ob zwei größer ist als (-gt
) drei. Wenn der Ausdruck wahr ist, ist die Ausgabe Null (0
) oder eine (1
), falls falsch.
Arithmetische Bash-Operatoren
Bash bietet eine große Auswahl an arithmetischen Operatoren für verschiedene Berechnungen und Auswertungen. Die Operatoren arbeiten mit dem let
, declare
, und arithmetische Erweiterung.
Nachfolgend finden Sie eine Kurzreferenztabelle, die arithmetische Bash-Operatoren und ihre Funktionalität beschreibt.
Syntax | Beschreibung |
---|---|
++x , x++ | Vor- und Nachinkrement. |
--x , x-- | Pre- und Post-Dekrement. |
+ , - , * , / | Addition, Subtraktion, Multiplikation, Division. |
% , ** (oder ^ ) | Modulo (Rest) und Potenzierung. |
&& , || , ! | Logisches UND, ODER und Negation. |
& , | , ^ , ~ | Bitweises AND, OR, XOR und Negation. |
<= , < , > , => | Kleiner als oder gleich, kleiner als, größer als und größer als oder gleich Vergleichsoperatoren. |
== , != | Gleichheits- und Ungleichheitsvergleichsoperatoren. |
= | Zuweisungsoperator. Kombiniert mit anderen arithmetischen Operatoren. |
Wie man Mathe in Bash macht
Bash bietet je nach Art des Problems verschiedene Möglichkeiten, mathematische Berechnungen durchzuführen.
Nachfolgend finden Sie Beispiele für einige häufig auftretende Probleme, bei denen mathematische Funktionen oder Befehle von Bash als Lösung verwendet werden. Die meisten Beispiele verwenden die arithmetische Erweiterungsnotation von Bash. Der Abschnitt behandelt auch allgemeine Bash-Mathematikfehler und wie man sie löst.
Mathematik mit ganzen Zahlen
Die arithmetische Expansionsnotation ist am einfachsten zu verwenden und zu manipulieren, wenn man mit ganzen Zahlen arbeitet. Erstellen Sie beispielsweise einen Ausdruck mit Variablen und berechnen Sie das Ergebnis sofort:
echo $((x=2, y=3, x+y))
Um mehrere Ausdrücke auszuwerten, verwenden Sie die zusammengesetzte Notation, speichern Sie jede Berechnung in einer Variablen und geben Sie das Ergebnis aus. Zum Beispiel:
((x=2, y=3, a=x+y, b=x*y, c=x**y)); echo $a, $b, $c
Beachten Sie beim Teilen Folgendes:
1. Eine Division durch Null (0) ist nicht möglich und löst einen Fehler aus.
2. Die arithmetische Erweiterung von Bash unterstützt keine Gleitkommaarithmetik. Beim Versuch, in diesem Fall zu dividieren, zeigt der Ausgang Null (0).
Das Ergebnis der ganzzahligen Division muss eine ganze Zahl sein.
Inkrementieren und Dekrementieren
Die arithmetische Erweiterung von Bash verwendet das Inkrementieren und Dekrementieren von Ganzzahlen im C-Stil. Der Operator zum Inkrementieren oder Dekrementieren steht entweder vor oder nach der Variablen, was zu unterschiedlichem Verhalten führt.
Steht der Operator vor der Variablen (++x
oder --x
), erfolgt das Inkrement oder Dekrement vor der Wertzuweisung. Führen Sie die folgenden Zeilen aus, um zu sehen, wie das Vorinkrementieren funktioniert:
number=1
echo $((++number))
Die Variable wird erhöht und der neue Wert ist sofort verfügbar.
Steht der Operator hinter der Variablen (x++
oder x--
), erfolgt die Erhöhung oder Verringerung nach der Wertzuweisung. Führen Sie Folgendes aus, um zu sehen, wie Post-Incrementing funktioniert:
number=1
echo $((number++))
echo $number
Die Variable bleibt gleich und erhöht sich bei der folgenden Verwendung.
Fließkomma-Arithmetik
Obwohl die arithmetische Erweiterung von Bash keine Gleitkommaarithmetik unterstützt, gibt es andere Möglichkeiten, solche Berechnungen durchzuführen. Nachfolgend finden Sie vier Beispiele, die Befehle oder Programmiersprachen verwenden, die auf den meisten Linux-Systemen verfügbar sind.
1. Verwendung von awk
für bis zu 6 Nachkommastellen:
awk 'BEGIN { x = 2.3; y = 3.2; print "x * y = "(x * y) }'
2. Verwendung von bc
mit dem -l
Flag für bis zu 20 Dezimalstellen:
echo "2.3 * 3.2" | bc -l
3. Verwendung von Perl für bis zu 20 Dezimalstellen:
perl -e 'print 2.3*3.2'
Perl ist in Linux-Systemen oft vorinstalliert.
4. Verwenden von printf und arithmetischer Erweiterung, um einen Bruch in einen Dezimalwert umzuwandeln:
printf %.<precision>f "$((10**<multiplier> * <fraction>))e-<multiplier>"
Die Genauigkeit bestimmt die Anzahl der Dezimalstellen, während der Multiplikator eine Zehnerpotenz ist. Die Zahl sollte kleiner als der Multiplikator sein. Andernfalls fügt die Formel nachgestellte Nullen in das Ergebnis ein.
Konvertieren Sie beispielsweise 1/3 in eine Dezimalzahl mit Genauigkeit zwei:
printf %.2f "$((10**3 * 1/3))e-3"
Vermeiden Sie diese Methode für genaue Berechnungen und verwenden Sie sie nur für wenige Dezimalstellen.
Berechnung eines Prozentsatzes und Rundung
Im Folgenden finden Sie zwei Möglichkeiten, einen Prozentsatz in Bash zu berechnen.
1. Verwenden Sie printf
mit arithmetischer Erweiterung.
printf %.2f "$((10**4 * part/total))e-4"%
Berechnen Sie beispielsweise, wie viel Prozent 40 von 71 sind:
printf %.2f%% "$((10**4 * 40/71))e-4"%
Die Genauigkeit ist auf zwei Dezimalstellen begrenzt, und das Ergebnis wird immer abgerundet.
2. Verwenden Sie awk
mit printf
für eine bessere Genauigkeit:
awk 'BEGIN { printf "%.2f%%", (part/total*100) }'
Berechnen Sie beispielsweise, wie viel Prozent 40 von 71 sind, mit:
awk 'BEGIN { printf "%.2f%%", (40/71*100) }'
Die Antwort wird aufgerundet, wenn die dritte Dezimalstelle höher als fünf ist, was eine bessere Genauigkeit bietet.
Eine Fakultät in der Shell finden
Um eine Fakultät für eine beliebige Zahl zu berechnen, verwenden Sie eine rekursive Bash-Funktion.
Für kleine Zahlen funktioniert die arithmetische Erweiterung von Bash gut:
factorial () {
if (($1 > 1))
then
echo $(( $( factorial $(($1 - 1)) ) * $1 ))
else
echo 1
return
fi
}
Verwenden Sie die folgende Syntax, um die Fakultät auf eine Zahl zu überprüfen:
factorial 5
Die Methode ist langsam und hat eine begrenzte Genauigkeit (bis zu Fakultät 20).
Verwenden Sie für höhere Genauigkeit, schnellere Ergebnisse und größere Zahlen den bc
Befehl. Zum Beispiel:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1}
factorial(<number>)' | bc
Ersetzen Sie <number>
mit der zu berechnenden Fakultätszahl. Um beispielsweise die Fakultät von 50 zu finden, verwenden Sie:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1} factorial(50)' | bc
Die Ausgabe gibt das Berechnungsergebnis an das Terminal aus.
Erstellen einer Bash-Rechnerfunktion
Erstellen Sie eine einfache Bash-Taschenrechnerfunktion mit dem folgenden Code:
calculate() { printf "%s\n" "[email protected]" | bc -l; }
Die Funktion nimmt Benutzereingaben entgegen und leitet die Gleichung in bc
weiter Befehl.
Um die Verwendung von Programmen zu vermeiden, verwenden Sie alternativ die arithmetische Erweiterung von Bash in einer Funktion:
calculate() { echo $(("[email protected]")); }
Beachten Sie die Beschränkungen der arithmetischen Erweiterung. Fließkomma-Arithmetik ist bei dieser Funktion nicht verfügbar.
Speichern Sie die Funktion in der .bashrc Datei, um die Funktion immer in der Shell verfügbar zu haben.
Verwendung unterschiedlicher arithmetischer Grundlagen
Standardmäßig verwendet die arithmetische Erweiterung von Bash Zahlen zur Basis zehn. Um die Zahlenbasis zu ändern, verwenden Sie das folgende Format:
base#number
Wo Basis ist eine ganze Zahl zwischen zwei und 64.
Um beispielsweise eine binäre Berechnung (Basis 2) durchzuführen, verwenden Sie:
echo $((2#1010+2#1010))
Oktale (Basis 8) Berechnungen verwenden ein 0-Präfix als Alias. Zum Beispiel:
echo $((010+010))
Hexadezimale Berechnungen (Basis 16) ermöglichen die Verwendung von 0x als Basispräfix. Zum Beispiel:
echo $((0xA+0xA))
Die Ausgabe gibt das Ergebnis für jede Berechnung in Basis zehn aus.
Einheiten umrechnen
Erstellen Sie ein einfaches Bash-Skript zum Umrechnen von Einheiten:
1. Öffnen Sie einen Texteditor wie Vim und erstellen Sie eine convert.sh Skript. Zum Beispiel:
vim convert.sh
2. Fügen Sie den folgenden Code ein:
#!/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
Das Programm verwendet Bash read, um Benutzereingaben entgegenzunehmen und die Umrechnung von Fuß in Zoll und von Zoll in Fuß zu berechnen.
3. Speichern Sie das Skript und schließen Sie es:
:wq
4. Führen Sie das Bash-Skript aus mit:
. convert.sh
Geben Sie eine Zahl ein und sehen Sie sich das Ergebnis an. Verwenden Sie für unterschiedliche Umrechnungen geeignete Umrechnungsformeln.
Behebung von „Bash-Fehler:Wert zu groß für Basis“
Bleiben Sie bei der Arbeit mit unterschiedlichen Zahlenbasen innerhalb der Zahlenbasisgrenzen. Zum Beispiel verwenden Binärzahlen 0 und 1, um Zahlen zu definieren:
echo $((2#2+2#2))
Versuch, 2#2
zu verwenden als Zahl gibt einen Fehler aus:
bash: 2#2: value too great for base (error token is "2#2")
Die Zahl hat nicht das richtige Format für binäre Verwendung. Um den Fehler zu beheben, wandeln Sie die Zahl in eine Binärzahl um, um die Berechnung korrekt durchzuführen:
echo $((2#10+2#10))
Die Binärzahl 10
ist 2
in Basis zehn.
Lösung von „Syntaxfehler:ungültiger arithmetischer Operator“
Die arithmetische Erweiterungsnotation von Bash funktioniert nur für ganzzahlige Berechnungen. Versuchen Sie, zwei Fließkommazahlen zu addieren, zum Beispiel:
echo $((2.1+2.1))
Der Befehl gibt einen Fehler aus:
bash: 2.1+2.1: syntax error: invalid arithmetic operator (error token is ".1+2.1")
Um den Fehler zu beheben, verwenden Sie normale ganzzahlige Arithmetik oder eine andere Methode, um die Gleichung zu berechnen.
Lösung von „Bash-Fehler:Integer-Ausdruck erwartet“
Beim Vergleich zweier Zahlen wird der test
Der Befehl erfordert ganze Zahlen. Versuchen Sie beispielsweise den folgenden Befehl:
[ 1 -gt 1.5 ]
Die Ausgabe gibt einen Fehler aus:
bash: [: 1.5: integer expression expected
Beheben Sie den Fehler, indem Sie ganzzahlige Werte vergleichen.