GNU/Linux >> Linux Esercitazione >  >> Linux

Spiegazione delle operazioni matematiche di Bash (aritmetica di Bash).

Introduzione

Le operazioni matematiche e aritmetiche sono essenziali negli script Bash. Varie attività di automazione richiedono operazioni aritmetiche di base, come la conversione della temperatura della CPU in Fahrenheit. L'implementazione di operazioni matematiche in Bash è semplice e molto facile da imparare.

Questa guida ti insegna come eseguire la matematica di base in Bash in vari modi.

Prerequisiti

  • Accesso alla riga di comando/terminale.
  • Un editor di testo per codificare esempi, come nano o Vi/Vim.
  • Conoscenza di base dello scripting Bash.

Perché hai bisogno di matematica in Bash Scripting?

Sebbene la matematica non sia lo scopo principale degli script Bash, sapere come eseguire calcoli essenziali è utile per vari casi d'uso.

I casi d'uso comuni includono:

  • Somma/sottrazione/moltiplicazione/divisione di numeri.
  • Numeri arrotondati.
  • Numeri in aumento e in diminuzione.
  • Conversione di unità.
  • Calcoli a virgola mobile.
  • Trovare le percentuali.
  • Lavorare con basi numeriche diverse (binarie, ottali o esadecimali).

A seconda dell'attività di automazione, la matematica e l'aritmetica di base negli script Bash aiutano a eseguire un calcolo rapido, ottenendo risultati immediati nel formato desiderato.

Comandi e metodi matematici di Bash

Alcuni comandi Linux consentono di eseguire immediatamente calcoli di base e avanzati. Questa sezione mostra esempi di matematica di base con ciascun metodo.

Espansione aritmetica

Il modo migliore per fare matematica in Bash è usare l'espansione aritmetica della shell. La funzionalità integrata valuta le espressioni matematiche e restituisce il risultato. La sintassi per le espansioni aritmetiche è:

$((expression))

La sintassi è composta da:

  • Notazione composta (()) che valuta l'espressione.
  • L'operatore variabile $ per memorizzare il risultato.

Ad esempio, aggiungi due numeri e fai eco al risultato:

echo $((2+3))

La notazione di espansione aritmetica è il metodo preferito quando si lavora con gli script Bash. La notazione è spesso vista insieme a if istruzioni e cicli for in Bash.

Comando awk

Il comando awk funge da selettore per le espressioni di pattern. Ad esempio, per eseguire l'addizione utilizzando awk comando, utilizzare la seguente istruzione di esempio:

awk 'BEGIN { x = 2; y = 3; print "x + y = "(x+y) }'

Per le variabili x = 2 e y = 3 , l'output stampa x + y = 5 alla console.

Comando bc

Il bc comando (abbreviazione di b asic c alculator) è un'utilità della riga di comando che esegue il rendering del linguaggio bc. Il programma viene eseguito come un programma interattivo o accetta input standard per eseguire operazioni aritmetiche di precisione arbitraria.

Convogliare un'equazione dallo standard input nel comando per recuperare i risultati. Ad esempio:

echo "2+3" | bc

L'output stampa il risultato del calcolo.

Comando dc

Il dc comando (abbreviazione di d chiedi c alculator) è un'utilità calcolatrice che supporta la notazione polacca inversa. Il programma accetta input standard e supporta l'aritmetica di precisione illimitata.

Inserisci un'equazione di input standard nel comando per recuperare il risultato. Ad esempio:

echo "2 3 + p" | dc

Il p nell'equazione invia il segnale di stampa al dc comando.

dichiara Comando

Il comando Bash dichiara consente il calcolo di interi. Per utilizzare declare per i calcoli, aggiungi il -i opzione. Ad esempio:

declare -i x=2 y=3 z=x+y

Echo ogni variabile per vedere i risultati:

echo $x + $y = $z

L'output stampa ogni variabile sulla console.

comando espr

Il expr command è un'utilità della riga di comando legacy per la valutazione dell'aritmetica di interi. Un esempio expr il comando è simile al seguente:

expr 2 + 3

Separare i numeri e il segno dell'operazione con spazi ed eseguire il comando per vedere il risultato del calcolo.

Comando fattore

Il factor command è un'utilità della riga di comando che stampa i fattori per qualsiasi intero positivo e il risultato fattorizza in numeri primi.

Ad esempio, per stampare i fattori del numero 100, eseguire:

factor 100

L'output stampa il numero fattorizzato.

lascia il comando

Il comando Bash let esegue varie operazioni aritmetiche, bit per bit e logiche. Il comando integrato funziona solo con numeri interi. L'esempio seguente mostra il let sintassi del comando:

let x=2+3 | echo $x

L'output stampa i risultati.

Test comando

Il test Il comando in Linux valuta le espressioni condizionali e spesso si accoppia con l'istruzione if di Bash. Esistono due varianti per la sintassi del test:

test 2 -gt 3; echo $?

O in alternativa:

[ 2 -gt 3 ]; echo $?

Il test comando valuta se due è maggiore di (-gt ) tre. Se l'espressione è vera, l'output è zero (0 ) o uno (1 ) se falso.

Operatori aritmetici Bash

Bash offre un'ampia gamma di operatori aritmetici per vari calcoli e valutazioni. Gli operatori lavorano con il let , declare e espansione aritmetica.

Di seguito è riportata una tabella di riferimento rapido che descrive gli operatori aritmetici di Bash e le loro funzionalità.

Sintassi Descrizione
++x , x++ Pre e post-incremento.
--x , x-- Pre e post-decremento.
+ , - , * , / Addizione, sottrazione, moltiplicazione, divisione.
% , ** (o ^ ) Modulo (resto) ed esponenziazione.
&& , || , ! AND logico, OR e negazione.
& , | , ^ , ~ AND bit a bit, OR, XOR e negazione.
<= , < , > , => Minore o uguale a, minore, maggiore e maggiore o uguale agli operatori di confronto.
== , != Operatori di confronto di uguaglianza e disuguaglianza.
= Operatore di assegnazione. Si combina con altri operatori aritmetici.

Come fare matematica in Bash

Bash offre diversi modi per eseguire calcoli matematici a seconda del tipo di problema.

Di seguito sono riportati alcuni esempi di problemi comuni che utilizzano le funzionalità o i comandi matematici di Bash come soluzione. La maggior parte degli esempi utilizza la notazione di espansione aritmetica di Bash. La sezione tratta anche gli errori matematici comuni di Bash e come risolverli.

Matematica con numeri interi

La notazione di espansione aritmetica è la più semplice da usare e manipolare quando si lavora con numeri interi. Ad esempio, crea un'espressione con variabili e calcola immediatamente il risultato:

echo $((x=2, y=3, x+y))

Per valutare più espressioni, utilizzare la notazione composta, memorizzare ogni calcolo in una variabile e fare eco al risultato. Ad esempio:

((x=2, y=3, a=x+y, b=x*y, c=x**y)); echo $a, $b, $c

Quando provi a dividere, tieni presente quanto segue:

1. La divisione per zero (0) è impossibile e genera un errore.

2. L'espansione aritmetica di Bash non supporta l'aritmetica in virgola mobile. Quando si tenta di dividere in questo caso, l'uscita mostra zero (0).

Il risultato della divisione di interi deve essere un intero.

Incremento e decremento

L'espansione aritmetica di Bash utilizza l'incremento e il decremento di interi in stile C. L'operatore per l'incremento o il decremento è prima o dopo la variabile, producendo un comportamento diverso.

Se l'operatore è prima della variabile (++x o --x ), l'incremento o il decremento avviene prima dell'assegnazione del valore. Per vedere come funziona il pre-incremento, esegui le seguenti righe:

number=1
echo $((++number))

La variabile aumenta e il nuovo valore è immediatamente disponibile.

Se l'operatore è dopo la variabile (x++ o x-- ), l'incremento o il decremento avviene dopo l'assegnazione del valore. Per vedere come funziona il post-incremento, esegui quanto segue:

number=1
echo $((number++))
echo $number

La variabile rimane la stessa e si incrementa nell'uso successivo.

Aritmetica in virgola mobile

Sebbene l'espansione aritmetica di Bash non supporti l'aritmetica in virgola mobile, esistono altri modi per eseguire tali calcoli. Di seguito sono riportati quattro esempi di utilizzo di comandi o linguaggi di programmazione disponibili sulla maggior parte dei sistemi Linux.

1. Utilizzo di awk fino a 6 cifre decimali:

awk 'BEGIN { x = 2.3; y = 3.2; print "x * y = "(x * y) }'

2. Utilizzando bc con il -l flag fino a 20 cifre decimali:

echo "2.3 * 3.2" | bc -l

3. Utilizzo di Perl fino a 20 cifre decimali:

perl -e 'print 2.3*3.2'

Perl viene spesso preinstallato nei sistemi Linux.

4. Usare printf e l'espansione aritmetica per convertire una frazione in decimale:

printf %.<precision>f "$((10**<multiplier> * <fraction>))e-<multiplier>"

La precisione determina quante cifre decimali, mentre il moltiplicatore è una potenza di dieci. Il numero dovrebbe essere inferiore al moltiplicatore. In caso contrario, la formula inserisce zeri finali nel risultato.

Ad esempio, converti 1/3 in un decimale con precisione due:

printf %.2f "$((10**3 * 1/3))e-3"

Evita questo metodo per calcoli precisi e usalo solo per un numero ridotto di cifre decimali.

Calcolo di una percentuale e arrotondamento

Di seguito sono riportati due modi per calcolare una percentuale in Bash.

1. Usa printf con espansione aritmetica.

printf %.2f "$((10**4 * part/total))e-4"%

Ad esempio, calcola quale percentuale 40 è da 71:

printf %.2f%% "$((10**4 * 40/71))e-4"%

La precisione è limitata a due cifre decimali e la risposta viene sempre arrotondata per difetto.

2. Usa awk con printf per una migliore precisione:

awk 'BEGIN { printf "%.2f%%", (part/total*100) }'

Ad esempio, calcola quanta percentuale è 40 da 71 con:

awk 'BEGIN { printf "%.2f%%", (40/71*100) }'

La risposta arrotonda per eccesso se la terza cifra decimale è maggiore di cinque, fornendo una migliore precisione.

Trovare un fattoriale nella shell

Per calcolare un fattoriale per qualsiasi numero, utilizzare una funzione Bash ricorsiva.

Per piccoli numeri, l'espansione aritmetica di Bash funziona bene:

factorial () { 
    if (($1 > 1))
    then
        echo $(( $( factorial $(($1 - 1)) ) * $1 ))
    else

        echo 1
        return
    fi
}

Per controllare il fattoriale per un numero, usa la seguente sintassi:

factorial 5

Il metodo è lento e ha una precisione limitata (fino a fattoriale 20).

Per una maggiore precisione, risultati più rapidi e numeri più grandi, utilizza il bc comando. Ad esempio:

echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1}
 factorial(<number>)' | bc

Sostituisci <number> con il numero fattoriale da calcolare. Ad esempio, per trovare il fattoriale di 50, usa:

echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1} factorial(50)' | bc

L'output stampa il risultato del calcolo sul terminale.

Creazione di una funzione di calcolatrice Bash

Crea una semplice funzione calcolatrice Bash con il seguente codice:

calculate() { printf "%s\n" "[email protected]" | bc -l; }

La funzione accetta l'input dell'utente e convoglia l'equazione nel bc comando.

In alternativa, per evitare di usare programmi, usa l'espansione aritmetica di Bash in una funzione:

calculate() { echo $(("[email protected]")); }

Tieni a mente i limiti dell'espansione aritmetica. L'aritmetica in virgola mobile non è disponibile con questa funzione.

Salva la funzione nel .bashrc file per avere sempre la funzione disponibile nella shell.

Utilizzo di basi aritmetiche diverse

Per impostazione predefinita, l'espansione aritmetica di Bash utilizza numeri in base dieci. Per modificare la base numerica, utilizzare il seguente formato:

base#number

Dove base è un numero intero compreso tra due e 64.

Ad esempio, per eseguire un calcolo binario (base 2), utilizzare:

echo $((2#1010+2#1010))

I calcoli ottali (base 8) utilizzano un prefisso 0 come alias. Ad esempio:

echo $((010+010))

I calcoli esadecimali (base 16) consentono di utilizzare 0x come prefisso di base. Ad esempio:

echo $((0xA+0xA))

L'output stampa il risultato in base dieci per qualsiasi calcolo.

Converti unità

Crea un semplice script Bash per convertire le unità:

1. Apri un editor di testo, come Vim, e crea un convert.sh sceneggiatura. Ad esempio:

vim convert.sh

2. Incolla il seguente codice:

#!/bin/bash

## Program for feet and inches conversion

echo "Enter a number to be converted:"

read number

echo $number feet to inches:
echo "$number*12" | bc -l

echo $number inches to feet:
echo "$number/12" | bc -l

Il programma utilizza Bash read per prendere l'input dell'utente e calcola la conversione da piedi a pollici e da pollici a piedi.

3. Salva lo script e chiudi:

:wq

4. Esegui lo script Bash con:

. convert.sh

Inserisci un numero e guarda il risultato. Per conversioni diverse, utilizza le formule di conversione appropriate.

Risolto "errore bash:valore troppo grande per base"

Quando si lavora con basi numeriche diverse, mantenersi entro i limiti delle basi numeriche. Ad esempio, i numeri binari utilizzano 0 e 1 per definire i numeri:

echo $((2#2+2#2))

Tentativo di utilizzare 2#2 come numero restituisce un errore:

bash: 2#2: value too great for base (error token is "2#2")

Il numero non è il formato corretto per l'uso binario. Per risolvere l'errore, converti il ​​numero in binario per eseguire correttamente il calcolo:

echo $((2#10+2#10))

Il numero binario 10 è 2 in base dieci.

Risolto "errore di sintassi:operatore aritmetico non valido"

La notazione di espansione aritmetica di Bash funziona solo per i calcoli di interi. Prova ad aggiungere due numeri in virgola mobile, ad esempio:

echo $((2.1+2.1))

Il comando stampa un errore:

bash: 2.1+2.1: syntax error: invalid arithmetic operator (error token is ".1+2.1")

Per risolvere l'errore, usa l'aritmetica dei numeri interi regolari o un metodo diverso per calcolare l'equazione.

Risolto "errore bash:attesa espressione intera"

Quando si confrontano due numeri, il test il comando richiede numeri interi. Ad esempio, prova il seguente comando:

[ 1 -gt 1.5 ]

L'output stampa un errore:

bash: [: 1.5: integer expression expected

Risolvi l'errore confrontando i valori interi.


Linux
  1. Spiegazione del comando della trappola

  2. Bash wait Comando

  3. Parentesi nell'aritmetica espr:3 * (2 + 1)?

  4. comando di esportazione bash

  5. Esegui il comando bash sulla pipeline jenkins

Comando Bash Echo spiegato con esempi in Linux

Scripting Bash – Spiegazione del comando Printf con esempi

Script Bash(II)

Spiegazione del comando Arping su Linux

Il comando di spostamento di Linux:spiegato e semplificato!

Spiegazione del comando AWS S3 cp