Izračunavanje matematičnih izrazov v skriptnem jeziku Shell - V. del


Ljudje bi se počutili prijetno, če bi razumeli Shell-ove skripte in jih tekoče pisali, kot je treba. To je zadnja objava te vadnice, kjer bomo izvajali nekoliko zapletene matematične operacije s pomočjo skriptnega jezika. Zadnji štirje članki serije Shell Scripting, ki so kronološko.

  1. Razumevanje osnovnih nasvetov za skriptni jezik lupine Linux - I. del
  2. 5 skriptov lupine za začetnike Linuxa, ki se učijo programiranja lupine - II. del
  3. Jadranje po svetu Linux BASH skript - III. del
  4. Matematični vidik programiranja lupine Linuxa - IV. del

Začnimo s Fibonaccijevo serijo

Vzorec števil, pri čemer je vsako število vsota dveh predhodnih števil. Serija je 0, 1, 1, 2, 3, 5, 8 …… Po definiciji sta prvi dve številki v zaporedju Fibonccai 0 in 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

Poznate dejstvo, da računalnik razume samo v binarni obliki, to je '0' in '1' in večina nas je uživala pri učenju pretvorbe decimalnega v binarno. Kaj pa napisati preprost skript za to zapleteno operacijo.

#!/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

Opomba: Zgornji skript sprejema vnos med izvajanjem, kar očitno pomaga.

No, vgrajeni ukaz "bc" lahko pretvori decimalno v binarno v skriptu z eno vrstico. Zaženi na svojem terminalu.

 echo "obase=2; NUM" | bc

Zamenjajte 'NUM' s številko, ki jo želite pretvoriti iz decimalne v binarno. Na primer

 echo "obase=2; 121" | bc 

1111001

Nato bomo napisali skript, ki deluje ravno nasprotno od zgornjega skripta, Pretvarjanje binarnih vrednosti v decimalke.

#!/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

Opomba: Zgornjo funkcijo lahko v terminalu izvedete z ukazom "bc" kot.

 echo "ibase=2; BINARY" | bc

Zamenjajte "BINARY" z binarno številko, tj.

 echo "ibase=2; 11010101" | bc 

213

Podobno lahko sami zapišete pretvorbo iz osmiške, šestnajstiške v decimalno in obratno. Doseganje zgornjega rezultata v terminalu z uporabo ukaza 'bc' je.

 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

Nekateri pogosti numerični testi, ki se uporabljajo v skriptnem jeziku lupine z opisom, so.

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

To je vse za ta članek in serijo člankov. To je zadnji članek Shell Script Series in to ne pomeni, da noben članek o skriptnem jeziku ne bo spet tukaj, pomeni samo, da je vadnica skriptov o lupini končana in kadar koli najdemo zanimivo temo, ki jo je vredno vedeti, ali poizvedbo vaših ljudi, z veseljem bomo nadaljevali serijo od tu.

Ostanite zdravi, nastavljeni in povezani s Tecmintom. Kmalu pridem z drugo zanimivo temo, ljudje boste radi brali. Delite svoje dragocene misli v oddelku za komentarje.