Beregning av matematiske uttrykk i Shell Scripting Language - Del V


Dere ville føle dere komfortable, forstå Shell-skript og skrive dem flytende, etter behov. Dette er det siste innlegget i denne opplæringsserien, der vi skal utføre litt komplekse matematiske operasjoner ved å bruke skriptspråk. De fire siste artiklene i serien Shell Scripting som er kronologisk.

  1. Forstå grunnleggende Linux Shell-skriptspråktips – del I
  2. 5 Shell-skript for Linux-nybegynnere for å lære Shell-programmering – Del II
  3. Seile gjennom Linux-verdenen BASH-skripting – del III
  4. Matematisk aspekt ved Linux Shell-programmering – Del IV

La oss starte med Fibonacci-serien

Et tallmønster der hvert tall er summen av to foregående tall. Serien er 0, 1, 1, 2, 3, >5, 8...... Per definisjon er de to første tallene i Fibonccai-sekvensen 0 og 1.

Manus 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
Eksempelutgang
[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

Last ned Fibonacci.sh

Du er kjent med det faktum at datamaskinen bare forstår i binærformatet, dvs. "0" og "1", og de fleste av oss har likt å lære konverteringen til >Desimal til Binær. Hva med å skrive et enkelt skript for denne komplekse operasjonen.

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
Eksempelutgang
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Merk: Skriptet ovenfor godtar Input under kjøretid, som åpenbart er en hjelp.

Last ned Decimal2Binary.sh

Vel, den innebygde 'bc'-kommandoen kan konvertere en desimal til binær i et skript med én linje. Kjør, på terminalen din.

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

Erstatt «NUM» med tallet du vil konvertere fra desimal til binært. For eksempel,

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

1111001

Deretter skal vi skrive et skript som fungerer like motsatt av skriptet ovenfor, Konvertering av binære verdier til desimal.

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
Eksempelutgang
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Merk: Funksjonen ovenfor kan utføres i terminal ved å bruke «bc»-kommandoen som.

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

Erstatt «BINÆR» med det binære tallet, nemlig

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

213

Last ned Binary2Decimal.sh

På samme måte kan du skrive konvertering fra oktal, heksadesimal til desimal og omvendt selv. Å oppnå resultatet ovenfor i terminal ved å bruke 'bc'-kommandoen er.

Desimal til oktal
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Desimal til heksadesimal
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Oktal til desimal
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Heksadesimal til desimal
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binær til oktal
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Noen av de vanlige numeriske-testene som brukes i shell-skriptspråk med beskrivelse er.

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

Det er alt for denne artikkelen og artikkelserien. Dette er den siste artikkelen i Shell Script Series, og det betyr ikke at ingen artikkel om scripting language vil være her igjen, det betyr bare at shell scripting-opplæringen er over og når vi finner et interessant emne som er verdt å vite eller et spørsmål fra dere, vi fortsetter gjerne serien herfra.

Hold deg frisk, innstilt og koblet til Tecmint. Veldig snart kommer jeg med et annet interessant emne, dere vil elske å lese. Del dine verdifulle tanker i kommentarseksjonen.