In primo luogo si può usare la seguente funzione bash:
sum() {
local sum=0
for arg in "$@"; do
(( sum += arg ))
done
echo $sum
}
Il secondo modo è quello di fare un non-loop variante:
{ printf %d+ "$@"; echo 0; } | bc
Esempio
Metterli in un file di script, somma.
#!/bin/bash
{ printf %d+ "$@"; echo 0; } | bc
Eseguirlo in questo modo:
$ ./sum 4
4
$ ./sum 4 4 5
13
Per il terzo modo posso consigliare :
Nessun bisogno di bash, pianura sh farà così:
#! /bin/sh -
IFS=+; echo "$(($*))"
$* POSIX conchiglie, si espande l'elenco dei parametri posizionali (in questo caso, gli argomenti script) separato dal primo carattere di $IFS (o spazio se $IFS viene annullato o nulla se $IFS è vuoto). $((...)) è la shell interna espansione aritmetica operatore (notare che supporta decimale, ottale e esadecimale numeri)
Se avete bisogno di virgola, che è dove avrete bisogno di una shell diversa come ksh93 o zsh (non bash bash supporta solo l'intero aritmetica), anche se si potrebbe anche usare awk:
#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}
Che uso a lungo (per intero) e doppio (floating point) tipo di numeri come attuato dal sistema. I numeri inseriti devono essere decimale a virgola mobile o ingegneria notazione in stile inglese (floating point delimitatore è il periodo di caratteri indipendentemente dalle impostazioni internazionali). Con alcuni awk implementazioni, avrà esito negativo se il primo numero è negativo come awk vorresti provare a interpretarla come un'opzione.
Alcuni awk implementazioni come GNU awk quando POSIXLY_CORRECT è nell'ambiente supportano anche le esadecimali anche con esponente binario notazioni. O con --non decimali-i dati, si capisce octals e le esadecimali:
$ POSIXLY_CORRECT=1 ./sum 0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum 010
8