Útreikningur á stærðfræðilegum tjáningum á skeljaforskriftarmáli - V. hluti


Þið fólk myndi líða vel, skilja Shell Scripts og skrifa þau reiprennandi, eins og þú þarft. Þetta er síðasta færslan í þessari kennsluröð, þar sem við munum framkvæma svolítið flóknar stærðfræðilegar aðgerðir með forskriftarmáli. Síðustu fjórar greinar í Shell Scripting seríunni sem eru í tímaröð.

  1. Skiljið undirstöðuráðleggingar um Linux Shell forskriftarmál – I. hluti
  2. 5 Shell forskriftir fyrir Linux nýliða til að læra Shell forritun – Part II
  3. Sigling í gegnum heim Linux BASH skrifta – hluti III
  4. Stærðfræðilegur þáttur Linux Shell-forritunar – Hluti IV

Byrjum á Fibonacci seríunni

Mynstur talna þar sem hver tala er summa af tveimur fyrri tölum. Röðin er 0, 1, 1, 2, 3, 5, 8…… Samkvæmt skilgreiningu eru fyrstu tvær tölurnar í Fibonccai röðinni 0 og 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

Þú þekkir þá staðreynd að tölva skilur aðeins á tvöfalda sniðinu, þ.e. „0“ og „1“ og flest okkar hafa notið þess að læra umbreytingu á aukastaf í tvöfaldur. Hvernig væri að skrifa einfalt handrit fyrir þessa flóknu aðgerð.

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

Athugið: Ofangreind handrit samþykkir inntak á keyrslutíma, sem augljóslega er hjálpartæki.

Jæja, innbyggða 'bc' skipunin getur umbreytt aukastaf í tvöfaldur í handriti með einni línu. Hlaupa, við flugstöðina þína.

 echo "obase=2; NUM" | bc

Skiptu út 'NUM' fyrir töluna sem þú vilt breyta úr aukastaf í tvöfaldur. Til dæmis,

 echo "obase=2; 121" | bc 

1111001

Næst munum við skrifa handrit sem virkar beint á móti ofangreindu handriti, umbreyta tvígildum í aukastaf.

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

Athugið: Hægt er að framkvæma ofangreinda aðgerð í flugstöðinni með því að nota 'bc' skipunina sem.

 echo "ibase=2; BINARY" | bc

Skiptu út „BINARY“ fyrir tvíundarnúmerið, þ.e.

 echo "ibase=2; 11010101" | bc 

213

Á sama hátt getur þú skrifað umbreytingu úr áttund, sextánda tölu yfir í aukastaf og öfugt sjálfur. Að ná ofangreindri niðurstöðu í flugstöðinni með því að nota 'bc' skipunina er.

 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

Sum algengu töluprófin sem notuð eru í skel forskriftarmáli með lýsingu eru.

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

Það er allt fyrir þessa grein og greinaröðina. Þetta er síðasta greinin í Shell Script Series og það þýðir ekki að engin grein um forskriftarmál verði hér aftur, það þýðir aðeins að skeljaforskriftarkennslunni er lokið og alltaf þegar við finnum áhugavert efni sem vert er að vita eða fyrirspurn frá ykkur, við munum með ánægju halda áfram seríunni héðan.

Vertu heilbrigður, stilltur og tengdur við Tecmint. Mjög bráðlega mun ég koma með annað áhugavert efni, þið munuð elska að lesa. Deildu dýrmætum hugsunum þínum í athugasemdahlutanum.