Zoeken op website

Wiskundige uitdrukkingen berekenen in Shell-scripttaal - Deel V


Jullie zouden zich op hun gemak voelen, Shell-scripts begrijpen en ze vloeiend schrijven, afhankelijk van jouw behoefte. Dit is het laatste bericht van deze tutorialserie, waarin we een beetje complexe wiskundige bewerkingen zullen uitvoeren met behulp van scripttaal. De laatste vier artikelen uit de serie Shell Scripting zijn chronologisch.

  1. Begrijp de basistips voor Linux Shell-scripttaal – Deel I
  2. 5 Shell-scripts voor Linux-nieuwkomers om Shell-programmering te leren - Deel II
  3. Zeilen door de wereld van Linux BASH-scripting – Deel III
  4. Wiskundig aspect van Linux Shell-programmering – Deel IV

Laten we beginnen met de Fibonacci-reeks

Een patroon van getallen waarbij elk getal de som is van twee voorgaande getallen. De reeks is 0, 1, 1, 2, 3, >5, 8…… Per definitie zijn de eerste twee getallen in de Fibonccai reeks 0 en 1.

Script 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
Voorbeelduitvoer
[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

Fibonacci.sh downloaden

U bent bekend met het feit dat computers alleen het binaire formaat begrijpen, d.w.z. '0' en '1' en de meesten van ons hebben met plezier de conversie van >Decimaal naar Binair. Wat dacht je van het schrijven van een eenvoudig script voor deze complexe operatie.

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

Decimal		Binary 
1121      	10001100001

Opmerking: het bovenstaande script accepteert invoer tijdens runtime, wat uiteraard een hulpmiddel is.

Decimal2Binary.sh downloaden

Welnu, het ingebouwde ‘bc‘ commando kan een decimaal naar binair converteren in een script van één regel. Ren naar uw terminal.

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

Vervang ‘NUM’ door het getal dat u wilt converteren van Decimaal naar Binair. Bijvoorbeeld,

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

1111001

Vervolgens gaan we een script schrijven dat precies het tegenovergestelde functioneert van het bovenstaande script: Binaire waarden omzetten naar Decimaal.

Script 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
Voorbeelduitvoer
[root@tecmint ~]# chmod 755 Binary2Decimal.sh
[root@tecmint ~]# ./Binary2Decimal.sh

Enter a number : 
11 
3

Opmerking: De bovenstaande functie kan in de terminal worden uitgevoerd met behulp van de opdracht ‘bc’ as.

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

Vervang ‘BINARY’ door het binaire getal, namelijk

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

213

Binary2Decimal.sh downloaden

Op dezelfde manier kunt u zelf de conversie van octaal, hexadecimaal naar decimaal en omgekeerd schrijven. Het bovenstaande resultaat in de terminal bereiken met behulp van de opdracht ‘bc’ is.

Decimaal naar octaal
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Decimaal naar hexadecimaal
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Octaal naar decimaal
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Hexadecimaal naar decimaal
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Binair naar octaal
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Enkele van de Algemene Numerieke tests die worden gebruikt in de shell-scripttaal met beschrijving zijn.

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

Dat is alles voor dit artikel en de artikelenreeks. Dit is het laatste artikel van Shell Script Series en dat betekent niet dat er geen artikel over scripttaal meer zal verschijnen. Het betekent alleen dat de shell-scripting-tutorial voorbij is en dat we altijd een interessant onderwerp tegenkomen dat de moeite waard is om te weten of een vraag van jullie, we zullen de serie graag vanaf hier voortzetten.

Blijf gezond, afgestemd en verbonden met Tecmint. Binnenkort kom ik met een ander interessant onderwerp, jullie zullen het graag lezen. Deel uw waardevolle gedachten in het Commentaargedeelte.