linux - commands - Suma de enteros en la concha
window linux (9)
Aquí está mi código de shell simple. Quiero que el resultado sea 2.Shell trata todo como una cadena. ¿Cómo puedo hacer esto?
num=1
num=$(( $num + 1 ))
EDITAR:
Código completo: ¿Qué hay de malo en esto si quiero imprimir de 1 a 10?
#! /bin/bash
num=1
until test $num -eq 10
do
num=$(( $num + 1 ))
echo $num
done
@tonio; por favor, no recomiende el uso de construcciones de subshell (`... o $ (...)) cuando no son necesarias (para mantener la confusión al máximo, $ ((...)) no es una construcción de sub-shell ). Los sub-shells pueden hacer que un gran rendimiento golpee incluso con cantidades de datos bastante triviales. Lo mismo es cierto para cada lugar donde se utiliza un programa externo para hacer algo que podría hacerse con un soporte integrado.
Ejemplo:
num=1
time while [[ $num -lt 10000 ]]; do
num=$(( num+1 ))
done
echo $num
num=1
time while /bin/test $num -lt 10000; do
num=$( /bin/expr $num + 1 )
done
echo $num
Salida (ejecutar en ksh en Linux):
real 0m0.04s user 0m0.04s sys 0m0.01s 10000 real 0m20.32s user 0m2.23s sys 0m2.92s 10000
... así que el factor de tiempo de ejecución de 250, y el factor de tiempo de CPU de 100. Admito que el ejemplo que utilicé fue uno exagerado, con el requisito explícito de omitir todos los elementos incorporados, pero creo que se hizo el punto: crear los nuevos procesos están expenisve, evítelos cuando pueda y conozca su shell para reconocer dónde se crean los nuevos procesos.
En bash
, no necesitas hacer nada especial:
aix@aix:~$ num=1
aix@aix:~$ num=$(( $num + 1 ))
aix@aix:~$ echo $num
2
Esto podría funcionar para usted:
num=1; ((num++)); echo $num
2
o
num=1; echo $((++num))
2
para bucles
for num in {1..10}; do echo $num; done
o (al menos en bash)
for ((num=1; num<=10; num++)) { echo $num; }
Segundo bucle más útil cuando más programación involucró:
for (( num=1,mun=10; num<=10; num++,mun--)) { echo $num $mun; }
No está especificando qué shell está utilizando, pero la forma más concisa que conozco es esta (funciona al menos en bash):
num=$[num+1]
Si solo aumenta en uno y cambia la variable en lugar de imprimir / asignar, entonces:
((num++))
Es una solución mejor / más elegante. Vea la respuesta de dogbane para eso.
Si pasara por los valores, usaría este formulario en su lugar:
for i in `seq 1 10`; do
echo $i
done
Puedes usar algo como:
num=1
num=`expr $num + 1`
También funcionará con shells no bash, como ksh.
Solo lo hiciste:
$ num=1; num=$(( $num + 1 ));echo $num
2
Nota : No necesita citar variables dentro de $(( ))
. Además, puedes usar $((num++))
Use ((num++))
como abreviatura para incrementar num
.
$ num=1
$ ((num++))
$ echo $num
2
funciona para mi
$ num=1
$ num=$(( $num + 1 ))
$ echo $num
2
¿Qué salida obtienes?
Leer más sobre bash Arithmetic @ tldp
EDITAR
Para hacer algo 10 veces en bash puedes usar (usando brace-expansion )
$ for i in {1..10}; do echo $i; done
1
2
3
4
5
6
7
8
9
10
Sin embargo, no puede utilizar variables entre {}
. Si este es el caso, usa seq
lugar.
prueba esto
$ num=1; num=`expr $num + 1`; echo $num;