Matemaattisten lausekkeiden laskeminen Shell-komentosarjakielellä - Osa V


Te ihmiset tunteisitte olonsa mukavaksi, ymmärtäisitte Shell-komentosarjat ja kirjoittaisitte ne sujuvasti tarpeidesi mukaan. Tämä on tämän opetusohjelmasarjan viimeinen viesti, jossa suoritamme hieman monimutkaisia matemaattisia operaatioita komentosarjakielellä. Shell Scripting -sarjan neljä viimeistä artikkelia, jotka ovat kronologisesti.

  1. Linux Shellin komentosarjakielen perusvihjeet – osa I
  2. 5 Shell-komentosarjaa Linux-aloittelijoille Shell-ohjelmoinnin oppimiseen – Osa II
  3. Purjehtiminen Linuxin BASH-komentosarjan maailman läpi – Osa III
  4. Linux Shell -ohjelmoinnin matemaattinen näkökohta – Osa IV

Aloitetaan Fibonacci-sarjasta

Lukumalli, jossa jokainen luku on kahden edellisen luvun summa. Sarjat ovat 0, 1, 1, 2, 3, >5, 8…… Määritelmän mukaan Fibonccai-sarjan kaksi ensimmäistä numeroa ovat 0 ja 1.

Käsikirjoitus 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
Näytelähtö
[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

Lataa Fibonacci.sh

Olet perehtynyt siihen, että tietokone ymmärtää vain binäärimuodossa, eli '0' ja '1', ja useimmat meistä ovat nauttineet muunnoksen oppimisesta >Desimaali - binääri. Mitä jos kirjoittaisit yksinkertaisen skriptin tätä monimutkaista toimintaa varten.

Komentosarja 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
Näytelähtö
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Huomaa: yllä oleva skripti hyväksyy syötteen ajon aikana, mikä on tietysti apuväline.

Lataa Decimal2Binary.sh

Sisäänrakennettu bc-komento voi muuntaa desimaaliluvun binääriksi yksirivisessä skriptissä. Juokse terminaalissasi.

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

Korvaa 'NUM' numerolla, jonka haluat muuntaa desimaalista binääriksi. Esimerkiksi,

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

1111001

Seuraavaksi kirjoitamme komentosarjan, joka toimii juuri yllä olevan binääriarvojen muuntaminen desimaaliseksi - skriptin vastakohtana.

Komentosarja 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
Näytelähtö
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Huomaa: yllä oleva toiminto voidaan suorittaa päätteessä käyttämällä bc-komentoa as.

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

Korvaa 'BINARY' binääriluvulla, eli

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

213

Lataa Binary2Decimal.sh

Vastaavasti voit kirjoittaa muunnoksen oktaalista, heksadesimaalista desimaaliksi ja päinvastoin. Yllä olevan tuloksen saavuttaminen päätteessä bc-komennolla on.

Desimaalista oktaaliin
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Desimaalista heksadesimaaliin
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Oktaali desimaaliin
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Heksadesimaalista desimaaliin
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binaarista oktaaliin
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Jotkut Yleiset numeeriset -testit, joita käytetään shell-komentosarjakielessä kuvauksella.

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

Siinä kaikki tälle artikkelille ja artikkelisarjalle. Tämä on Shell Script -sarjan viimeinen artikkeli, eikä se tarkoita, etteikö täällä olisi enää kirjoituskieltä käsittelevää artikkelia, se tarkoittaa vain, että komentotulkkikomentosarjan opetusohjelma on ohi ja aina kun löydämme mielenkiintoisen aiheen, joka kannattaa tietää. tai kysely teiltä, jatkamme mielellämme sarjaa täältä.

Pysy terveenä, kuulolla ja yhteydessä Tecmintiin. Tulen pian esittelemään toisen mielenkiintoisen aiheen, te ihmiset rakastatte lukea. Jaa arvokkaat ajatuksesi kommenttiosiossa.