Wie man mathematische Ausdrücke in Shell-Skripten berechnet
Mittlerweile sollten Sie sich beim Schreiben und Verstehen grundlegender Shell-Skripte etwas sicherer fühlen. Wenn Sie den vorherigen Teilen dieser Tutorial-Serie gefolgt sind, sind Sie bereits mit Variablen, Schleifen, Bedingungen und einfachen Operationen im Shell-Scripting vertraut.
Dies ist der fünfte Teil dieser Shell-Skript-Tutorialserie. In diesem Beitrag werden wir etwas fortgeschrittene mathematische Operationen untersuchen und wie man sie mit Shell-Skripten handhabt.
Lass uns mit der Fibonacci-Folge anfangen
Die Fibonacci-Reihe ist eine Zahlenfolge, bei der jede Zahl die Summe der beiden vorhergehenden Zahlen ist. Sie beginnt mit 0 und 1, sodass die Reihe lautet: 0, 1, 1, 2, 3, 5, 8, und so weiter.
Drehbuch 1: Fibonacci.sh
#!/bin/bash
echo "How many numbers of the Fibonacci series do you want?"
read total
Initialize the first two numbers
x=0
y=1
echo "Fibonacci Series up to $total terms:"
Print the first two numbers
echo "$x"
echo "$y"
Loop starts from the 3rd term
i=2
while [ $i -lt $total ]
do
z=$((x + y)) # Next number is sum of previous two
echo "$z"
x=$y
y=$z
i=$((i + 1))
done
Dezimal zu Binär Umwandlung
Jeder Computer versteht Binär: nur 0s und 1s. Hier erfahren Sie, wie Sie ein Shell-Skript schreiben können, um eine Dezimalzahl (wie 10) in Binär (1010) zu konvertieren.
Drehbuch 2: Decimal2Binary.sh
#!/bin/bash
Create an array of powers of 2 (2^31 to 2^0)
for ((i=32;i>=0;i--)); do
power=$((2**i))
powersOfTwo+=( $power )
done
Check if input was provided
if [ $# -eq 0 ]; then
echo -e "Usage: ./Decimal2Binary.sh <number1> <number2> ..."
exit 1
fi
echo -e "Decimal\t\tBinary"
Convert each number to binary
for num in "$@"; do
binary=""
started=0
for pow in "${powersOfTwo[@]}"; do
if [ $num -lt $pow ]; then
if [ $started -eq 1 ]; then
binary+="0"
fi
else
binary+="1"
num=$((num - pow))
started=1
fi
done
echo -e "$1\t\t$binary"
done
Willst du eine schnellere Möglichkeit? Verwende den Befehl bc, der eine Dezimalzahl in einer einzigen Codezeile in Binär umwandeln wird.
echo "obase=2; NUM" | bc
Ersetzen Sie NUM durch die Dezimalzahl, die Sie in Binär umwandeln möchten.
echo "obase=2; 121" | bc
Dies wird das binäre Äquivalent von 121 ausgeben, welches 1111001 ist.
Binär-zu-Dezimal-Umwandlung
Als Nächstes werden wir ein Skript schreiben, das das Gegenteil des obigen Skripts ausführt und binäre Werte in Dezimalwerte umwandelt.
Drehbuch 3: Binary2Decimal.sh
#!/bin/bash
echo "Enter a binary number:"
read Binary
Check if input is a valid binary number
if ! [[ $Binary =~ ^[01]+$ ]]; then
echo "Please enter a valid binary number (only 0 and 1 allowed)."
exit 1
fi
Decimal=0
power=1
Loop from right to left
while [ $Binary -ne 0 ]; do
digit=$((Binary % 10))
Decimal=$((Decimal + digit * power))
power=$((power * 2))
Binary=$((Binary / 10))
done
echo "Decimal Value: $Decimal"
Die oben genannte Umrechnung kann direkt im Terminal mit dem bc-Befehl wie folgt durchgeführt werden:
echo "ibase=2; BINARY" | bc
Ersetzen Sie einfach BINARY durch die binäre Zahl, die Sie konvertieren möchten.
echo "ibase=2; 11010101" | bc
Dies wird den entsprechenden Dezimalwert ausgeben.
Andere Zahlenbasis-Konvertierungen mit dem bc-Befehl
Ähnlich können Sie Skripte schreiben, um zwischen oktal, hexadezimal und dezimal hin und her zu konvertieren. Sie können diese Konversionen auch direkt im Terminal mit dem Befehl bc durchführen.
Dezimal zu Oktal
echo "obase=8; 123" | bc
Dezimal zu Hexadezimal
echo "obase=16; 123" | bc
Okto zu Dezimal
echo "ibase=8; 173" | bc
Hexadezimal zu Dezimal
echo "ibase=16; 7B" | bc
Binär zu Oktal
echo "ibase=2; obase=8; 101101" | bc
Gängige numerische Tests im Shell-Scripting
Verwende diese Tests innerhalb von if-Anweisungen, um Zahlen zu vergleichen.
| Testbefehl | Bedeutung |
|---|---|
[ $a -eq $b ] | a ist gleich b |
[ $a -ne $b ] | a ist nicht gleich b |
[ $a -gt $b ] | a ist größer als b |
[ $a -lt $b ] | a ist kleiner als b |
[ $a -ge $b ] | a ist größer als oder gleich b |
[ $a -le $b ] | a ist kleiner oder gleich b |
Fazit
In diesem fünften Teil unserer Shell-Skript-Tutorial-Serie haben wir uns auf etwas fortgeschrittenere mathematische Operationen eingelassen, wobei wir uns auf die Umwandlung von Zahlen zwischen verschiedenen Zahlensystemen und die Berechnung der Fibonacci-Reihe konzentriert haben.
Mittlerweile sollten Sie sich sicherer im Umgang mit grundlegenden mathematischen Operationen in Shell-Skripten fühlen, wie zum Beispiel beim Erzeugen der Fibonacci-Folge und beim Durchführen von Umrechnungen zwischen dezimalen, binären, oktalen und hexadezimalen Zahlensystemen.


