Mathematesch Ausdréck an der Shell Skriptsprooch berechnen - Deel V


Dir Leit géife sech bequem fillen, Shell Scripten verstoen a se fléissend schreiwen, no Äre Bedierfnesser. Dëst ass de leschte Post vun dëser Tutorial Serie, wou mir e bësse komplex mathematesch Operatioune mat der Skriptsprooch ausféieren. Déi lescht véier Artikele vun der Shell Scripting Serie déi chronologesch sinn.

  1. Basis Linux Shell Skriptsprooch Tipps verstoen - Deel I
  2. 5 Shell Scripte fir Linux Newbies fir Shell Programméierung ze léieren - Deel II
  3. Segelen duerch d'Welt vu Linux BASH Scripting - Deel III
  4. Mathematesche Aspekt vu Linux Shell Programméierung - Deel IV

Loosst eis mat der Fibonacci Serie ufänken

E Muster vun Zuelen wou all Zuel d'Zomm vun zwou virdrun Zuelen ass. D'Serie ass 0, 1, 1, 2, 3, 5, 8... Per Definitioun sinn déi éischt zwou Zuelen an der Fibonccai Sequenz 0 an 1.

#!/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
 chmod 755 Fibonacci.sh
 ./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

Dir sidd Gewunnecht mat der Tatsaach datt de Computer nëmmen am Binäre Format versteet, dh '0' an '1' an déi meescht vun eis hunn d'Konversioun vun Dezimal op Binär geléiert. Wéi wier et mat engem einfache Skript fir dës komplex Operatioun ze schreiwen.

#!/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 [email ; 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
 chmod 755 Decimal2Binary.sh
 ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Notiz: Dat uewe genannte Skript akzeptéiert Input bei der Lafzäit, wat offensichtlech eng Hëllef ass.

Gutt den inbuilt 'bc' Kommando kann en Dezimal op binär an engem Skript vun enger eenzeger Zeil konvertéieren. Run, bei Ärem Terminal.

 echo "obase=2; NUM" | bc

Ersetzen 'NUM' mat der Nummer, déi Dir vun Dezimal op Binär wëllt konvertéieren. Zum Beispill,

 echo "obase=2; 121" | bc 

1111001

Als nächst wäerte mir e Skript schreiwen deen just vis-à-vis vum uewe genannte Skript funktionnéiert, Binär Wäerter op Dezimal ëmsetzen.

#!/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
 chmod 755 Binary2Decimal.sh
 ./Binary2Decimal.sh

Enter a number : 
11 
3

Bemierkung: Déi uewe genannte Funktioun kann am Terminal ausgefouert ginn mam 'bc' Kommando als.

 echo "ibase=2; BINARY" | bc

Ersetzen 'BINARY' mat der binärer Nummer, nämlech,

 echo "ibase=2; 11010101" | bc 

213

Ähnlech kënnt Dir d'Konversioun vun oktal, hexadezimal op Dezimal a vice-versa selwer schreiwen. D'Erreeche vum uewe genannte Resultat am Terminal mam 'bc' Kommando ass.

 echo "obase=8; Decimal" | bc
 echo "obase=16; Decimal" | bc
 echo "ibase=8; Octal" | bc
 echo "ibase=16; Hexadecimal" | bc
 echo "ibase=2;obase=8 Binary" | bc

E puer vun de gemeinsame numereschen Tester, déi an der Shell-Skriptsprooch mat Beschreiwung benotzt ginn, ass.

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

Dat ass alles fir dësen Artikel, an d'Artikelserie. Dëst ass de leschten Artikel vun der Shell Script Series an et heescht net datt keen Artikel iwwer Scripting Sprooch erëm hei wäert sinn, et heescht nëmmen datt d'Shell Scripting Tutorial eriwwer ass a wa mir en interessanten Thema fannen dat wäertvoll ass ze wëssen oder eng Ufro vun Iech Leit, mir wäerten frou d'Serie vun hei aus weiderzemaachen.

Bleift gesond, ofgestëmmt a verbonne mat Tecmint. Ganz geschwënn kommen ech mat engem aneren interessanten Thema, Dir wäert gär liesen. Deelt Är wäertvoll Gedanken an der Kommentarsektioun.