Bucles tipo C/C++ en Bash

Iniciado por leogtz, 30 Octubre 2010, 07:42 AM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Hola, hace rato que quería escribir esto.

Yo honestamente prefiero los ciclos tipo C que los que brinda la shell, así que relato un poco como utilizarse, varía un poco, pero practicamente es la misma.

FOR:


Código (bash) [Seleccionar]
for((i = 0; i < 10; i++))
do
echo -e "Contador : ${i}";
done



Código (bash) [Seleccionar]
#!/bin/bash
for((i = 0; i < 10; ))
do
echo -e "Contador : ${i}";
((i++));
done


WHILE:

Código (bash) [Seleccionar]
#!/bin/bash
((i = 0));
while((i <= 10))
do
echo -e "${i}";
((i++));
done



Código (bash) [Seleccionar]
#!/bin/bash
((i = 0));
while((i++ <= 10))
do
echo -e "${i}";
done
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Afsoon

Pero si en While lo que intentas es declarar la variable "i" no seria mas comodo

Código (bash) [Seleccionar]

i= 0


en vez de hacer

Código (bash) [Seleccionar]

((i = 0));


para mi me parece mas "limpio"

leogtz

#2
Lo de la iniciaciòn es lo de menos, eso no lo querìa resaltar, lo que querìa resaltar es la similitud entre los ciclos. Lo demàs es irrelevante.

Además de que lanzaría un error declarando la variable como tu dices:

leo@leo-desktop:~/Escritorio$ cat shell.sh
#!/bin/bash
i= 3
echo -e "Valor : ${i}";
leo@leo-desktop:~/Escritorio$ bash shell.sh
shell.sh: line 2: 3: orden no encontrada
Valor :
leo@leo-desktop:~/Escritorio$


La correcta declaración con espacios es como ya lo indiqué.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Afsoon

Vale si tienes razon pero normalmente no me sale eso

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

JuszR

Yo si solo quiero una secuencia prefiero el otro (un poco más claro):
Código (bash) [Seleccionar]
for i in 1..10
do
   echo -n "$i "
done
- No programming language is perfect. There is not even a single best language; there are only languages well suited or perhaps poorly suited for particular purposes. [Herbert Mayer]

leogtz

#6
Supongo que querías decir:

Código (bash) [Seleccionar]
#!/bin/bash
for i in $(seq 1 1 10)
do
echo -e "$i ";
done


Código (bash) [Seleccionar]
#!/bin/bash
for i in `echo {1..10}`
do
echo -e "$i";
done
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com