Website-Suche

Berechnen mathematischer Ausdrücke in der Shell-Skriptsprache – Teil V


Sie werden sich wohl fühlen, Shell-Skripte verstehen und sie je nach Bedarf flüssig schreiben können. Dies ist der letzte Beitrag dieser Tutorialreihe, in der wir etwas komplexe mathematische Operationen mithilfe einer Skriptsprache ausführen werden. Die letzten vier Artikel der Shell Scripting-Reihe, chronologisch geordnet.

  1. Verstehen Sie grundlegende Tipps zur Linux-Shell-Skriptsprache – Teil I
  2. 5 Shell-Skripte für Linux-Neulinge zum Erlernen der Shell-Programmierung – Teil II
  3. Segeln durch die Welt der Linux-BASH-Skripterstellung – Teil III
  4. Mathematischer Aspekt der Linux-Shell-Programmierung – Teil IV

Beginnen wir mit der Fibonacci-Reihe

Ein Zahlenmuster, bei dem jede Zahl die Summe zweier vorhergehender Zahlen ist. Die Reihe ist 0,1, 1, 2, 3, 5, 8…… Per Definition sind die ersten beiden Zahlen in der Fibonccai-Sequenz 0 und 1.

Skript 1: Fibonacci.sh
#!/bin/bash
echo "How many numbers do you want of Fibonacci series ?" 
  read total 
  x=0 
  y=1 
  i=2 
  echo "Fibonacci Series up to $total terms :: " 
  echo "$x" 
  echo "$y" 
  while [ $i -lt $total ] 
  do 
      i=`expr $i + 1 ` 
      z=`expr $x + $y ` 
      echo "$z" 
      x=$y 
      y=$z 
  done
Beispielausgabe
[root@tecmint ~]# chmod 755 Fibonacci.sh
[root@tecmint ~]# ./Fibonacci.sh

How many numbers do you want of Fibonacci series ? 
10 
Fibonacci Series up to 10 terms :: 
0 
1 
1 
2 
3 
5 
8 
13 
21 
34

Laden Sie Fibonacci.sh herunter

Sie sind mit der Tatsache vertraut, dass Computer nur das Binärformat verstehen, d. h. „0“ und „1“, und die meisten von uns haben es genossen, die Konvertierung von zu lernen >Dezimal zu Binär. Wie wäre es, wenn Sie ein einfaches Skript für diesen komplexen Vorgang schreiben würden?

Skript 2: Decimal2Binary.sh
#!/bin/bash 

for ((i=32;i>=0;i--)); do 
        r=$(( 2**$i)) 
        Probablity+=( $r  ) 
done 

[[ $# -eq 0 ]] &echo -en "Decimal\t\tBinary\n" 
for input_int in $@; do 
s=0 
test ${#input_int} -gt 11 &printf "%-10s\t" "$input_int" 

        for n in ${Probablity[@]}; do 

                if [[ $input_int -lt ${n} ]]; then 
                        [[ $s = 1 ]] && printf "%d" 0 
                else 
                        printf "%d" 1 ; s=1 
                        input_int=$(( $input_int - ${n} )) 
                fi 
        done 
echo -e 
done
Beispielausgabe
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Hinweis: Das obige Skript akzeptiert Eingaben zur Laufzeit, was offensichtlich eine Hilfe ist.

Laden Sie Decimal2Binary.sh herunter

Nun, der eingebaute Befehl „bc“ kann in einem einzeiligen Skript eine Dezimalzahl in eine Binärzahl umwandeln. Laufen Sie an Ihrem Terminal.

[root@tecmint ~]# echo "obase=2; NUM" | bc

Ersetzen Sie „NUM“ durch die Zahl, die Sie von Dezimal in Binär umwandeln möchten. Zum Beispiel,

[root@tecmint ~]# echo "obase=2; 121" | bc 

1111001

Als Nächstes schreiben wir ein Skript, das genau das Gegenteil des obigen Skripts ist: Binärwerte in Dezimalwerte umwandeln.

Skript 3: Binary2Decimal.sh
#!/bin/bash 
echo "Enter a number :" 
read Binary 
if [ $Binary -eq 0 ] 
then 
echo "Enter a valid number " 
else 
while [ $Binary -ne 0 ] 
do 
Bnumber=$Binary 
Decimal=0 
power=1 
while [ $Binary -ne 0 ] 
do 
rem=$(expr $Binary % 10 ) 
Decimal=$((Decimal+(rem*power))) 
power=$((power*2)) 
Binary=$(expr $Binary / 10) 
done 
echo  " $Decimal" 
done 
fi
Beispielausgabe
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Hinweis: Die obige Funktion kann im Terminal mit dem Befehl „bc“ ausgeführt werden.

[root@tecmint ~]# echo "ibase=2; BINARY" | bc

Ersetzen Sie „BINARY“ durch die Binärzahl, d. h.

[root@tecmint ~]# echo "ibase=2; 11010101" | bc 

213

Laden Sie Binary2Decimal.sh herunter

Ebenso können Sie die Konvertierung von oktal, hexadezimal nach dezimal und umgekehrt selbst schreiben. Das obige Ergebnis wird im Terminal mit dem Befehl „bc“ erzielt.

Dezimal zu Oktal
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Dezimal zu Hexadezimal
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Oktal zu Dezimal
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Hexadezimal zu Dezimal
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binär zu Oktal
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Einige der Common Numeric-Tests, die in der Shell-Skriptsprache mit Beschreibung verwendet werden, sind.

Test : INTEGER1 -eq INTEGER2
Meaning: INTEGER1 is equal to INTEGER2
Test : INTEGER1 -ge INTEGER2
Meaning: INTEGER1 is greater than or equal to INTEGER2
Test: INTEGER1 -gt INTEGER2
Meaning: INTEGER1 is greater than INTEGER2
Test:INTEGER1 -le INTEGER2
Meaning: INTEGER1 is less than or equal to INTEGER2
Test: INTEGER1 -lt INTEGER2
Meaning: INTEGER1 is less than INTEGER2
Test: INTEGER1 -ne INTEGER2
Meaning: INTEGER1 is not equal to INTEGER2

Das ist alles für diesen Artikel und die Artikelserie. Dies ist der letzte Artikel der Shell Script Series und das bedeutet nicht, dass es keinen Artikel über Skriptsprache mehr geben wird, es bedeutet nur, dass das Shell-Scripting-Tutorial beendet ist und wann immer wir ein interessantes, wissenswertes Thema finden oder eine Anfrage von Ihnen, wir werden die Serie gerne von hier aus fortsetzen.

Bleiben Sie gesund, dran und verbunden mit Tecmint. Sehr bald werde ich mit einem weiteren interessanten Thema kommen, das Sie gerne lesen werden. Teilen Sie Ihre wertvollen Gedanken im Kommentarbereich mit.