Beregning af matematiske udtryk i Shell Scripting Language - del V


I mennesker ville føle sig godt tilpas, forstå Shell Scripts og skrive dem flydende i henhold til Deres behov. Dette er det sidste indlæg i denne tutorial-serie, hvor vi udfører en smule komplekse matematiske operationer ved hjælp af skriptsprog. De sidste fire artikler i Shell Scripting-serien, som er kronologisk.

  1. Forstå grundlæggende Linux Shell Scripting Language Tips - del I
  2. 5 shell-scripts til Linux-nybegyndere til at lære shell-programmering - del II
  3. Sejler gennem verden af Linux BASH Scripting - del III
  4. Matematisk aspekt af Linux Shell-programmering - del IV

Lad os starte med Fibonacci-serien

Et mønster med tal, hvor hvert tal er summen af to foregående tal. Serien er 0, 1, 1, 2, 3, 5, 8 ... Per definition er de to første tal i Fibonccai-sekvensen 0 og 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

Du er bekendt med, at computeren kun forstår i det binære format, dvs. '0' og '1', og de fleste af os har haft glæde af at lære konverteringen af decimal til binær. Hvad med at skrive et simpelt script til denne komplekse operation.

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

Bemærk: Ovenstående script accepterer input ved kørselstid, hvilket naturligvis er et hjælpemiddel.

Den indbyggede 'bc' kommando kan godt konvertere en decimal til binær i et script på en enkelt linje. Kør ved din terminal.

 echo "obase=2; NUM" | bc

Udskift ‘NUM’ med det nummer, som du vil konvertere fra decimal til binært. For eksempel,

 echo "obase=2; 121" | bc 

1111001

Dernæst skriver vi et script, der fungerer lige modsat ovenstående script, Konvertering af binære værdier til decimal.

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

Bemærk: Ovenstående funktion kan udføres i terminal ved hjælp af 'bc' kommando som.

 echo "ibase=2; BINARY" | bc

Udskift 'BINÆR' med det binære nummer, nemlig

 echo "ibase=2; 11010101" | bc 

213

På samme måde kan du selv skrive konvertering fra oktal, hexadecimal til decimal og omvendt. At gennemføre ovenstående resultat i terminal ved hjælp af kommandoen 'bc' er.

 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

Nogle af de almindelige numeriske tests, der bruges i shell scripting sprog med beskrivelse er.

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

Det er alt sammen for denne artikel og artikelserien. Dette er den sidste artikel i Shell Script Series, og det betyder ikke, at ingen artikel om Scripting-sprog vil være her igen, det betyder kun, at shell-scripting-tutorial er overstået, og når vi finder et interessant emne, der er værd at kende eller en forespørgsel fra jer folk, vi fortsætter med glæde herfra.

Bliv sund, tunet og forbundet til Tecmint. Meget snart kommer jeg med et andet interessant emne, I mennesker vil elske at læse. Del dine værdifulde tanker i kommentarsektionen.