Matematinių išraiškų skaičiavimas Shell skriptų kalba – V dalis


Jūs, žmonės, jaustumėtės patogiai, suprastumėte Shell scenarijus ir sklandžiai rašytumėte juos pagal jūsų poreikius. Tai paskutinis šios pamokų serijos įrašas, kuriame atliksime šiek tiek sudėtingus matematinius veiksmus naudodami scenarijų kalbą. Paskutiniai keturi Shell Scripting serijos straipsniai, kurie yra chronologiškai.

  1. Supraskite pagrindinius „Linux Shell“ scenarijų kalbos patarimus – I dalis
  2. 5 apvalkalo scenarijai, skirti Linux naujokams mokytis apvalkalo programavimo – II dalis
  3. Plaukimas per Linux BASH scenarijų pasaulį – III dalis
  4. Matematinis Linux apvalkalo programavimo aspektas – IV dalis

Pradėkime nuo „Fibonacci“ serijos

Skaičių šablonas, kuriame kiekvienas skaičius yra dviejų prieš tai einančių skaičių suma. Serija yra 0, 1, 1, 2, 3, >5, 8…… Pagal apibrėžimą pirmieji du skaičiai Fibonccai sekoje yra 0 ir 1.

1 scenarijus: 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
Pavyzdžio išvestis
[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

Atsisiųskite Fibonacci.sh

Esate susipažinęs su tuo, kad kompiuteris supranta tik dvejetainį formatą, t. y. „0“ ir „1“, ir daugumai mūsų patiko išmokti konvertuoti >Dešimtainė į Dvejetainė. Kaip parašyti paprastą scenarijų šiai sudėtingai operacijai.

2 scenarijus: 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
Pavyzdžio išvestis
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Pastaba: aukščiau pateiktas scenarijus priima įvestį vykdymo metu, o tai akivaizdžiai yra pagalba.

Atsisiųskite Decimal2Binary.sh

Integruota komanda bc gali konvertuoti dešimtainį į dvejetainį vienos eilutės scenarijuje. Bėkite prie savo terminalo.

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

Pakeiskite „NUM“ skaičiumi, kurį norite konvertuoti iš dešimtainio į dvejetainį. Pavyzdžiui,

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

1111001

Tada parašysime scenarijų, kuris veikia priešingai nei anksčiau pateiktas scenarijus, Dvejetainių reikšmių konvertavimas į dešimtainį.

3 scenarijus: 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
Pavyzdžio išvestis
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Pastaba: aukščiau nurodytą funkciją galima atlikti terminale naudojant komandą bc kaip.

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

Pakeiskite „BINARY“ dvejetainiu skaičiumi, t.

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

213

Atsisiųskite Binary2Decimal.sh

Panašiai galite patys parašyti konvertavimą iš aštuontainio, šešioliktainio į dešimtainį ir atvirkščiai. Aukščiau pateiktą rezultatą terminale galima pasiekti naudojant komandą „bc“.

Dešimtainė iki aštuntainė
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Dešimtainė iki šešioliktainė
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Aštuntainis iki dešimtainės
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Šešioliktainė į dešimtainę
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Dvejetainis iki aštuntainio
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Kai kurie bendrieji skaitiniai testai, naudojami apvalkalo scenarijų kalboje su aprašymu.

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

Tai viskas šiam straipsniui ir straipsnių serijai. Tai paskutinis Shell Script Series straipsnis ir tai nereiškia, kad čia daugiau nebus straipsnių apie scenarijų kalbą, tai tik reiškia, kad apvalkalo scenarijų rengimo pamoka baigėsi ir kai tik randame įdomią temą, kurią verta žinoti. arba jūsų, žmonių, užklausa, mes mielai tęsime seriją nuo čia.

Būkite sveiki, būkite nauji ir prisijungę prie Tecmint. Labai greitai ateisiu su kita įdomia tema, jums, žmonėms, patiks skaityti. Pasidalykite savo vertingomis mintimis Komentarų skiltyje.