El shell de linux: Comando let | Algo de Linux

lunes, 31 de marzo de 2008

El shell de linux: Comando let

El comando let nos permite trabajar fácilmente con variables numéricas en scripts.
Por ejemplo: Supongamos que queremos multiplicar por 2 el valor de una variable y almacenar el resultado en otra:

$ simple=4
$ let doble=simple*2

Si después de ejecutar estas dos instrucciones en un terminal, hacemos un:

$ echo $doble


Veremos que la variable doble vale 8.

Un ejemplo completo: Hacer un bucle while que incremente el valor de una variable CONTADOR y vaya mostrando los valores que toma dicha variable:

#!/bin/bash


CONTADOR=0
MAX=20

while [ $CONTADOR -lt $MAX ]; do
let CONTADOR=CONTADOR+1
echo El contador es $CONTADOR

done

19 comentarios:

Anónimo dijo...

Me ha servido tu post. gracias.

Anónimo dijo...

no me funciona m pone let: not found

Anónimo dijo...

No m funciona m pone let: not found
PORQUEEEEE????
L tngo q instalar alguna actualizacion
Tngo Ubuntu 7.10

Esteban M. Navas Martín dijo...

¿Podrías enseñarme cómo lo has utilizado?

eXp dijo...

Soy principiante con esto de bash y, al ejecutar tu script, me dice:

script: 10: let: not found
El contador es 0

Lo curioso es que cuando uso let directamente en el prompt si que funciona. Puedo hacer:

root@e-kipo:# let a=10
root@e-kipo:# let b=5
root@e-kipo:# let c=$a+$b
root@e-kipo:# echo $c
15

Qué extraño no? uso Ubuntu 8.10 intrepid

Esteban M. Navas dijo...

Puede ser que tengas algún error de sintaxis. El comando let debería funcionarte de igual modo tanto si lo ejecutas en la línea de comandos como si lo ejecutas en un script. Si quieres, mándame tu script y le echo un vistazo.

Jose dijo...

A mi me funciona perfectamente.
Gracias

Juampi23 dijo...

Me pasa exactamente lo mismo que a "eXp", en el terminal, si uso el comando let me funciona, hace las cuentas que necesito, etc...Pero dentro del vim, cuando programo y posteriormente ejecuto el shell script no me funciona, me dice "let: not found", y no hace las cuentas :S...Ni idea la verdad, cualquier ayuda mil gracias

P.D.: Uso Ubuntu 8.10

joacoo dijo...

a mi me paso lo mismo
al revisar varias veces me di cuenta
q habia dejado un espacio d mas
adelante de la variable
un error boludo pero suele suceder y mas si estamos aprendiendo

joaco dijo...

a mi me paso lo mismo
pero luego de revisar varias veces me di cuanta q cometi un error boludo
dejar un espacio de mas adelant de la variable, suele suceder y mas cuando c esta aprendiendo
espero q les sirva.

pd: me queria matar despues de perder tanto tiempo, pero fue comico

joacoo dijo...

a mi me paso lo mismo
pero luego de revisar varias veces me di cuanta q cometi un error boludo
dejar un espacio de mas adelant de la variable, suele suceder y mas cuando c esta aprendiendo
espero q les sirva.

pd: me queria matar despues de perder tanto tiempo, pero fue comico

Anónimo dijo...

"joacoo"

a mi me paso lo mismo
pero luego de revisar varias veces me di cuanta q cometi un error boludo
dejar un espacio de mas adelant de la variable, suele suceder y mas cuando c esta aprendiendo
espero q les sirva.

pd: me queria matar despues de perder tanto tiempo, pero fue comico

Anónimo dijo...

Un script que estaba haciendo, me fallaba en las asignaciones con set y me estaba volviendo loco, se me ocurrio probar con let... vi tu blog y voila!

Gracias artista!!!!

Anónimo dijo...

Hola. Sé que es antiguo pero no puedo resistir contestar a un anónimo con el error de "let: not found", por si a alguno le sucede lo mismo. En mi máquina si ejecuto:

sh script.sh

la orden let me falla. Me dice let:not found

Sin embargo si ejecutas el script (suponiendo que lo tengas en el directorio actual)

./script.sh

deja de dar dicho fallo. Por si a alguno le sucede igual que pruebe. Saludos.

Esteban M. Navas dijo...

Viendo tu comentario tan detallado, la respuesta es muy sencilla. /bin/sh suele ser un enlace a un shell. Por ejemplo, en debian /bin/sh es un enlace a /bin/dash. Por eso, no te funciona cuando lo ejecutas con:

sh script.sh

Y sí cuando le das permisos de ejecución y lo ejecutas con:

./script.sh

Comprueba cuál es tu shell, consultando la variable $SHELL:

echo $SHELL

En Debian el shell por defecto es bash, que sí tiene let. También te funcionará sin ningún problema si lo ejecutas así:

bash script.sh

Un saludo,

Esteban M.

gaviota2000 dijo...

Me has salvado la vida... Muchas gracias ;)

Paola dijo...

y si quiero hacer un contador que se me reinicie por día?
Como podría hacerlo?
Gracias

Esteban M. Navas Martín dijo...

Hola, Paola:

En mi opinión, si vas a tratar fechas, lo mejor es que te bases en el comando date.

No sé cuál es el problema real, pero puedes tomar una fecha base, calcular la diferencia con la fecha actual y realizar la acción que quieras cuando el contador llegue a un número determinado.

#!/bin/bash

fechainicial="20140120"

DIFERENCIA=$((( $(date +%s) - $(date --date $fechainicial +%s) )/(60*60*24)))

echo "Días transcurridos desde $fechainicial: $DIFERENCIA"

Anónimo dijo...

Sufrí igual que algunos pero al final funcionó solo que no supe que estaba mal. :-( Gracias.