Matemaatiliste avaldiste arvutamine shelliskripti keeles - V osa


Te, inimesed, tunneksite end mugavalt, mõistaksite Shell-skripte ja kirjutaksite neid ladusalt, vastavalt teie vajadustele. See on selle õpetussarja viimane postitus, kus viime läbi veidi keerukaid matemaatilisi toiminguid, kasutades skriptikeelt. Shell Scripting seeria viimased neli artiklit, mis on kronoloogiliselt.

  1. Mõistke põhilisi Linuxi šelli skriptikeele näpunäiteid - I osa
  2. 5 Shelli skripti Linuxi algajatele, et õppida Shelli programmeerimist - II osa
  3. Purjetamine läbi Linuxi BASH-skriptide maailma - III osa
  4. Linuxi kesta programmeerimise matemaatiline aspekt - IV osa

Alustame Fibonacci seeriast

Numbrite muster, kus iga number on kahe eelneva arvu summa. Seeria on 0, 1, 1, 2, 3, 5, 8 ... ... Definitsiooni järgi on Fibonccai järjestuse kaks esimest numbrit 0 ja 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

Teile on tuttav asjaolu, et arvuti saab aru ainult binaarses vormingus, st '0' ja '1' ning enamik meist on nautinud kümnendkoha teisendamist binaarseks. Kuidas oleks selle keeruka toimingu jaoks lihtsa skripti kirjutamine.

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

Märkus: ülaltoodud skript aktsepteerib sisendit käitusajal, mis on ilmselgelt abivahend.

Hästi sisseehitatud käsk bc saab teisendada kümnendkoha binaarseks ühe rea skriptis. Jookse oma terminalis.

 echo "obase=2; NUM" | bc

Asendage „NUM“ numbriga, mille soovite teisendada kümnendkohast binaarseks. Näiteks,

 echo "obase=2; 121" | bc 

1111001

Järgmisena kirjutame skripti, mis toimib ülaltoodud skripti vastas, binaarväärtuste teisendamine kümnendarvuks.

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

Märkus: ülaltoodud funktsiooni saab terminalis täita käsuga ‘bc’ as.

 echo "ibase=2; BINARY" | bc

Asendage “BINARY” kahendarvuga, st

 echo "ibase=2; 11010101" | bc 

213

Samamoodi võite ise kirjutada teisenduse kaheksandast, kuueteistkümnendkohast kümnendkohani ja vastupidi. Ülaltoodud tulemuse täitmine terminalis, kasutades käsku ‘bc’, on.

 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

Mõned shelliskriptide keeles koos kirjeldusega kasutatavad levinumad numbrilised testid on.

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

See on kõik selle artikli ja artikliseeria puhul. See on Shelli skriptide seeria viimane artikkel ja see ei tähenda, et ühtegi artiklit skriptikeele kohta siin enam pole, see tähendab ainult seda, et shelliskriptide õpetus on läbi ja alati, kui leiame huvitava teema, mida tasub teada, või päringu teilt, inimesed, meil on hea meel jätkata sarja siit.

Olge terve, häälestatud ja Tecmintiga ühendatud. Üsna varsti tulen uue huvitava teemaga, teile inimestele meeldib lugeda. Jagage oma väärtuslikke mõtteid jaotises Kommentaarid.