GNU/Linux >> Linux Esercitazione >  >> Linux

Bash Beginner Series #5:Utilizzo di operatori aritmetici negli script Bash

Facciamo un po' di matematica!

Durante la scrittura dei tuoi script bash, ti ritroverai spesso a voler capire il risultato di un calcolo aritmetico per determinare lo spazio su disco rimanente, le dimensioni dei file, le date di scadenza delle password, il numero di host, la larghezza di banda della rete, ecc.

In questo capitolo della serie per principianti di bash imparerai a usare gli operatori bash per eseguire vari calcoli aritmetici.

Per rinfrescarti la memoria, ecco gli operatori aritmetici in bash:

Operatore Descrizione
+ Aggiunta
- Sottrazione
* Moltiplicazione
/ Divisione intera (senza numeri decimali)
% Divisione modulo (dà solo resto)
** esponenziale (x alla potenza y)

Esecuzione di addizioni e sottrazioni negli script bash

Creiamo uno script bash chiamato addition.sh che aggiungerà semplicemente due dimensioni di file (in byte) e visualizzerà l'output.

A questo punto devi avere familiarità con gli argomenti negli script bash. Spero che anche tu abbia familiarità con i comandi cut and du.

Il comando du ti dà la dimensione del file lungo . L'output ha sia la dimensione del file che il nome del file. È qui che viene utilizzato il comando cut per estrarre la prima colonna (cioè la dimensione del file) dall'output. L'output del comando du viene passato al comando cut usando il reindirizzamento della pipe.

Ecco lo script:

#!/bin/bash

fs1=$(du -b $1 | cut -f1)
fs2=$(du -b $2 | cut -f1)

echo "File size of $1 is: $fs1"
echo "File size of $2 is: $fs2"

total=$(($fs1 + $fs2))

echo "Total size is: $total"

Nota che passerai i due nomi di file come argomenti allo script. Ad esempio, qui eseguo lo script e passo i due file /etc/passwd e /etc/group come argomenti:

[email protected]:~/scripts$ ./addition.sh /etc/passwd /etc/group
File size of /etc/passwd is: 2795
File size of /etc/group is: 1065
Total size is: 3860

La riga più importante in addition.sh lo script è:

total=$(($fs1 + $fs2))

Dove hai usato l'operatore + per sommare i due numeri $fs1 e $fs2. Si noti inoltre che per valutare qualsiasi espressione aritmetica è necessario racchiudere tra doppie parentesi come segue:

$((arithmetic-expression))

Puoi anche usare l'operatore meno (-) per la sottrazione. Ad esempio, il valore della sottovariabile nella seguente istruzione risulterà a sette:

sub=$((10-3))

Esecuzione di moltiplicazioni e divisioni negli script bash

Creiamo uno script bash chiamato giga2mega.sh che convertirà Gigabyte (GB) in Megabyte (MB):

#!/bin/bash

GIGA=$1
MEGA=$(($GIGA * 1024))

echo "$GIGA GB is equal to $MEGA MB"

Ora eseguiamo lo script per scoprire quanti Megabyte ci sono in quattro Gigabyte:

[email protected]:~/scripts$ ./giga2mega.sh 4
4 GB is equal to 4096 MB

Qui ho usato l'operatore di moltiplicazione (*) per moltiplicare il numero di Gigabyte per 1024 per ottenere l'equivalente in Megabyte:

MEGA=$(($GIGA * 1024))

È facile aggiungere più funzionalità a questo script per convertire Gigabyte (GB) in Kilobyte (KB):

KILO=$(($GIGA * 1024 * 1024))

Ti permetterò di convertire Gigabyte in byte come esercizio pratico!

Puoi anche usare l'operatore di divisione (/) per dividere due numeri. Ad esempio, il valore della variabile div nella seguente istruzione restituirà cinque:

div=$((20 / 4))

Si noti che questa è una divisione intera e quindi tutte le frazioni vengono perse. Ad esempio, se dividi 5 per 2, otterrai 2 che non è corretto, ovviamente:

[email protected]:~/scripts$ div=$((5 / 2))
[email protected]:~/scripts$ echo $div
2

Per ottenere un output decimale; puoi utilizzare il bc comando. Ad esempio, per dividere 5 per 2 con il bc comando, puoi usare la seguente istruzione:

echo "5/2" | bc -l
2.50000000000000000000

Nota che puoi usare anche altri operatori con bc comando ogni volta che hai a che fare con numeri decimali:

Utilizzo di potenza e resto (modulo)

Creiamo un calcolatore di potenza! Creerò uno script chiamato power.sh che accetterà due numeri a e b (come argomenti) e visualizzerà il risultato di a elevato al potere di b :

#!/bin/bash
a=$1
b=$2
result=$((a**b))
echo "$1^$2=$result"

Nota che utilizzo l'operatore di esponenziazione (**) per calcolare il risultato di a elevato al potere di b .

Eseguiamo alcune esecuzioni dello script per assicurarci che fornisca le risposte corrette:

[email protected]:~/scripts$ ./power.sh 2 3
2^3=8
[email protected]:~/scripts$ ./power.sh 3 2
3^2=9
[email protected]:~/scripts$ ./power.sh 5 2
5^2=25
[email protected]:~/scripts$ ./power.sh 4 2
4^2=16

È inoltre possibile utilizzare l'operatore modulo (%) per calcolare i resti interi. Ad esempio, il valore del rem variabile nella seguente istruzione restituirà 2:

rem=$((17%5))

Il resto qui è 2 perché 5 va in 17 tre volte e due rimangono!

Tempo di esercitazione:crea uno script bash per il convertitore di laurea

Concludiamo questo tutorial creando uno script chiamato c2f.sh che convertirà i gradi Celsius in gradi Fahrenheit usando l'equazione seguente:

F = C x (9/5) + 32

Questo sarà un buon esercizio per provare le nuove cose che hai appena imparato in questo tutorial di bash.

Ecco una soluzione (potrebbero esserci diversi modi per ottenere lo stesso risultato):

#!/bin/bash

C=$1
F=$(echo "scale=2; $C * (9/5) + 32" | bc -l)

echo "$C degrees Celsius is equal to $F degrees Fahrenheit."

Ho usato il bc comando perché abbiamo a che fare con i decimali e ho anche usato "scale=2" per visualizzare l'output in due punti decimali.

Eseguiamo alcune esecuzioni dello script per assicurarci che produca i risultati corretti:

[email protected]:~/scripts$ ./c2f.sh 2
2 degrees Celsius is equal to 35.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh -3
-3 degrees Celsius is equal to 26.60 degrees Fahrenheit.
[email protected]:~/scripts$ ./c2f.sh 27
27 degrees Celsius is equal to 80.60 degrees Fahrenheit.

Perfetto! Questo ci porta alla fine di questo tutorial. Metti in pratica ciò che hai imparato scaricando il set di esercizi bash di questo capitolo.

Bash Capitolo 5 Domande pratiche Problemi e la loro soluzione per mettere in pratica ciò che hai appena imparato in questo capitolo Bash-Capitolo-5-Domande pratiche-Linux-Handbook.pdf32 KB

Spero che ti sia piaciuto fare un po' di matematica con bash e resta sintonizzato per il prossimo tutorial della serie per principianti di bash mentre imparerai a manipolare le corde!


Linux
  1. Script Bash(I)

  2. Bash Beginner Series #9:Utilizzo delle funzioni in Bash

  3. Bash Beginner Series #8:Loop in Bash

  4. Come sostituire gli spazi nei nomi dei file usando uno script bash

  5. Come scrivere un numero intero in un file binario usando Bash?

Scripting Bash(III)

Bash Beginner Series #2:Comprensione delle variabili nello scripting di Bash Shell

Bash Beginner Series #4:Utilizzo di array in Bash

Bash Beginner Series #3:Passare argomenti agli script Bash

Bash Beginner Series #6:Operazioni con le stringhe in Bash

Bash Beginner Series #10:Automazione con Bash