Weboldal keresés

Matematikai kifejezések kiszámítása Shell Scripting nyelven – V. rész


Ön, emberek, jól érezné magát, megértené a Shell-szkripteket, és folyékonyan írná azokat, az Ön igényei szerint. Ez az oktatóanyag-sorozat utolsó bejegyzése, amelyben kissé összetett matematikai műveleteket fogunk végrehajtani szkriptnyelv segítségével. A Shell Scripting sorozat utolsó négy cikke, amelyek időrendben vannak.

  1. Alapvető Linux Shell Scripting nyelvi tippek – I. rész
  2. 5 Shell Script Linux kezdőknek a Shell programozás elsajátításához – II. rész
  3. Áthajózás a Linux BASH Scripting világán – III. rész
  4. A Linux Shell programozás matematikai vonatkozása – IV. rész

Kezdjük a Fibonacci sorozattal

Számminta, ahol minden szám két előző szám összege. A sorozat: 0, 1, 1, 2, 3, >5, 8…… Értelemszerűen a Fibonccai sorozat első két száma 0 és 1.

1. szkript: 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
Minta kimenet
[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

Töltse le a Fibonacci.sh-t

Ön ismeri azt a tényt, hogy a számítógép csak a bináris formátumot érti, azaz a '0' és '1' formátumot, és legtöbbünk örömmel tanulta a konvertálását. >Tizedes - Bináris. Mit szólna ehhez az összetett művelethez egy egyszerű szkript megírásához.

2. szkript: 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
Minta kimenet
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Megjegyzés: A fenti szkript futás közben fogadja a bevitelt, ami nyilvánvalóan segítség.

Töltse le a Decimal2Binary.sh-t

Nos, a beépített 'bc' parancs képes a tizedeset binárisra konvertálni egy egysoros szkriptben. Fuss a terminálon.

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

Cserélje ki a „NUM” értéket arra a számra, amelyet tizedesről binárisra szeretne konvertálni. Például,

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

1111001

Ezután egy olyan szkriptet írunk, amely a fenti Bináris értékek konvertálása tizedes szkripttel ellentétben működik.

3. szkript: 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
Minta kimenet
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Megjegyzés: A fenti funkció a terminálban végrehajtható a „bc” parancs használatával.

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

Cserélje ki a „BINARY” kifejezést a bináris számra, azaz

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

213

Töltse le a Binary2Decimal.sh-t

Hasonlóképpen saját maga is megírhatja a konverziót oktális, hexadecimális értékről tizedesre és fordítva. A fenti eredmény elérése terminálban a „bc” paranccsal az.

Tizedestől oktálisig
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Tizedestől hexadecimálisig
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Oktálistól tizedesjegyig
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Hexadecimálistól decimálisig
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Bináristól oktálisig
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

A leírással ellátott shell szkriptnyelvben használt általános numerikus tesztek közül néhány.

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

Ennyi a cikkhez és a cikksorozathoz. Ez a Shell Script Series utolsó cikke, és ez nem jelenti azt, hogy nem lesz itt többé cikk a szkriptnyelvről, csak azt jelenti, hogy a shell scripting bemutatója véget ért, és ha találunk egy érdekes témát, amelyet érdemes megismerni. vagy egy kérdésre, szívesen folytatjuk a sorozatot innen.

Maradjon egészséges, maradjon velünk, és kapcsolódjon a Tecminthez. Hamarosan újabb érdekes témával jelentkezem, imádni fogjátok az olvasást. Ossza meg értékes gondolatait a Megjegyzések részben.