2010-09-03 18 views
7

ciò che il miglior modo semplice ed elegante per riassumere numero in ksh o bash mio esempio è di circa lasciare il comando, ma vorrei trovare il modo migliore per sintesi tutti i numeriscript di shell + numeri somma

ad esempio

num1=1232 
num2=24 
num3=444 
. 
. 
. 

let SUM=$num1+num2+num3......... 

risposta

17

ne dite:

num1=1232 
num2=24 
num3=444 
sum=$((num1+num2+num3)) 
echo $sum # prints 1700 
0

è possibile utilizzare la sintassi $(()), ma se si dispone di numeri decimali, l'uso awk, o BC/dc per fare i tuoi calcoli, "portabile".

3

Accetto con ghostdog74. Una volta ho usato $ (()) funzione built-in, ma ho cambiato in bc perché il formato che riceviamo i dati non è molto "formato numerico". Controlla qui sotto:

[email protected]:/tmp> echo $((017 + 2)) 
17 
[email protected]:/tmp> echo $((17 + 2)) 
19 
[email protected]:/tmp> 

Sembra che nel primo caso comprenda numeri binari o esadecimali .. non molto sicuri.

Quindi ho cambiato in bc. È possibile scegliere modo Quale preferite:

bc << EOF 
$num1 + $num2 + $num3 
EOF 

o

bc <<< "$num1 + $num2 + $num3" 

Ci sono altri Cools modi per fare questo ... ma sarebbe bene se si inviano più particolari, come se sei eseguendo anche la divisione, è necessario aggiungere l'argomento bc -l per caricare la lib di matematica.

1

È possibile eliminare l'ultimo segno di dollaro e liberare spazio per gli operandi e gli operatori (inclusa la variabile e l'operatore di assegnazione) per la leggibilità se si sposta la doppia parentesi completamente verso l'esterno.

num1=1232 
num2=24 
num3=444 
((sum = num1 + num2 + num3)) 

((count++)) 

((sum += quantity)) 

Non è possibile utilizzare gli operatori di incremento (stile *= /= %= += -= <<= >>= &= ^= |= ++ --) a meno che non si utilizza let o all'esterno (()) modulo (o si sta incrementando le variabili o fare le assegnazioni sul lato destro della strada).