Ricerca nel sito web

Calcolo delle espressioni matematiche nel linguaggio di scripting della shell - Parte V


Voi vi sentirete a vostro agio, comprendendo gli script di Shell e scrivendoli fluentemente, secondo le vostre necessità. Questo è l'ultimo post di questa serie di tutorial, in cui eseguiremo operazioni matematiche un po' complesse utilizzando il linguaggio di scripting. Gli ultimi quattro articoli della serie Shell Scripting in ordine cronologico.

  1. Comprendere i suggerimenti di base sul linguaggio di scripting della shell Linux - Parte I
  2. 5 script di shell per principianti di Linux per imparare la programmazione di shell - Parte II
  3. Navigando nel mondo di Linux BASH Scripting – Parte III
  4. Aspetti matematici della programmazione della shell Linux - Parte IV

Cominciamo con la serie di Fibonacci

Uno schema di numeri in cui ciascun numero è la somma di due numeri precedenti. La serie è 0, 1, 1, 2, 3, 5, 8…… Per definizione, i primi due numeri nella sequenza Fibonccai sono 0 e 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
Uscita del campione
[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

Scarica Fibonacci.sh

Hai familiarità con il fatto che i computer comprendono solo il formato binario, ovvero "0" e "1" e alla maggior parte di noi è piaciuto imparare la conversione di Decimale a Binario. Che ne dici di scrivere un semplice script per questa complessa operazione.

Script 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
Uscita del campione
[root@tecmint ~]# chmod 755 Decimal2Binary.sh
[root@tecmint ~]# ./Decimal2Binary.sh 1121

Decimal		Binary 
1121      	10001100001

Nota: lo script sopra accetta l'input in fase di esecuzione, il che ovviamente è di aiuto.

Scarica Decimal2Binary.sh

Bene, il comando integrato "bc" può convertire un decimale in binario in uno script di una sola riga. Corri, al tuo terminale.

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

Sostituisci "NUM" con il numero che desideri convertire da decimale a binario. Per esempio,

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

1111001

Successivamente scriveremo uno script che funziona esattamente in modo opposto allo script precedente, Converting Binary Values in Decimal.

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

Enter a number : 
11 
3

Nota: la funzione di cui sopra può essere eseguita nel terminale utilizzando il comando "bc" as.

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

Sostituisci "BINARIO" con il numero binario, vale a dire,

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

213

Scarica Binary2Decimal.sh

Allo stesso modo puoi scrivere tu stesso la conversione da ottale, esadecimale a decimale e viceversa. Ottenere il risultato sopra riportato nel terminale utilizzando il comando "bc" è:

Da decimale a ottale
[root@tecmint ~]# echo "obase=8; Decimal" | bc
Da decimale a esadecimale
[root@tecmint ~]# echo "obase=16; Decimal" | bc
Da ottale a decimale
[root@tecmint ~]# echo "ibase=8; Octal" | bc
Da esadecimale a decimale
[root@tecmint ~]# echo "ibase=16; Hexadecimal" | bc
Da binario a ottale
[root@tecmint ~]# echo "ibase=2;obase=8 Binary" | bc

Alcuni dei test Common Numeric utilizzati nel linguaggio di scripting della shell con descrizione sono.

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

Questo è tutto per questo articolo e per la serie di articoli. Questo è l'ultimo articolo della Shell Script Series e non significa che non ci sarà più alcun articolo sul linguaggio di scripting, significa solo che il tutorial sullo scripting della shell è finito e ogni volta che troviamo un argomento interessante che vale la pena conoscere o una vostra domanda, saremo felici di continuare la serie da qui.

Rimani in salute, sintonizzato e connesso a Tecmint. Molto presto verrò con un altro argomento interessante, voi adorerete leggere. Condividi i tuoi preziosi pensieri nella Sezione commenti.