[opensuse-es] uan de shell
Hola esto para algunos será muy sencillo pero nunc alo he hecho. enun script shell (/bin/sh) como puedo hacer un for? es decir (for(int i = 0;i<100;i++){}) Gracias -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
El Fri, 26 Mar 2010 11:35:32 +0100, koxkorrita escribió:
esto para algunos será muy sencillo pero nunc alo he hecho. enun script shell (/bin/sh) como puedo hacer un for? es decir (for(int i = 0;i<100;i++){})
*** #!/bin/sh for((i=0;i<100;i++)) do echo $i done *** Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Content-ID: <alpine.LSU.2.00.1003262218490.1061@nimrodel.valinor> El 2010-03-26 a las 11:08 -0000, Camaleón escribió:
El Fri, 26 Mar 2010 11:35:32 +0100, koxkorrita escribió:
esto para algunos será muy sencillo pero nunc alo he hecho. enun script shell (/bin/sh) como puedo hacer un for? es decir (for(int i = 0;i<100;i++){})
*** #!/bin/sh for((i=0;i<100;i++)) do echo $i done ***
¡Ostrás! ¿Tan facil? ¿Desde cuando se puede hacer así, eso es desde siempre? No me lo sabía, yo usaba esto: for X in `seq 1 100`; do echo $X done que es estructuralmente parecida a esta: for FILES in filename1 filename2 filename3 do gzip $FILES done } La tuya se ejecuta más rápido, me la quedo ;-) Por cierto, no uses "#!/bin/sh", usa "#!/bin/bash", a no ser que sepas que es una construcción universal. Hay algunas distros que han pensado o han cambiado la shell por defecto, a otra más liviana que el bash, precisamente para acelerar el arranque (es la discusión previa a lo del upstart ese), y se encontraron con el problema de que algunos scripts "oficiales" no funcionaban. Tenían que, o bien especificar bash, o cambiar el script para que fuera con la nueva shell (y son scripts que a veces vienen de "upstream", lo que añade una cosa más a mantener en cada distro). Así que es mejor especificarla. Si alguien luego quiere usar el script con otra shell, que lo cambie. Es que me sospecho que esa construcción "for" es específica del bash, y es posible que hasta sea relativamente reciente. - -- Saludos Carlos E. R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkutJx4ACgkQtTMYHG2NR9VPfQCgjSCQ/4esWVU15pMCWiIr5Q7r IKAAn2C52NhOeYNfpqaHeLpabe6YZyz+ =XMAL -----END PGP SIGNATURE-----
El Fri, 26 Mar 2010 22:29:00 +0100, Carlos E. R. escribió:
El 2010-03-26 a las 11:08 -0000, Camaleón escribió:
*** #!/bin/sh for((i=0;i<100;i++)) do echo $i done ***
¡Ostrás! ¿Tan facil? ¿Desde cuando se puede hacer así, eso es desde siempre?
:-?? Hum... yo lo he leído en el manual: 3.2.4.1 Looping Constructs http://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs Lo he ejecutado, he visto que funcionaba y... bueno, pensaba que era así (la verdad es que en javascript se usa esa misma estructura para el "for", por eso no me ha extrañado).
No me lo sabía, yo usaba esto:
for X in `seq 1 100`; do echo $X done
que es estructuralmente parecida a esta:
for FILES in filename1 filename2 filename3 do gzip $FILES done }
La tuya se ejecuta más rápido, me la quedo ;-)
X-)
Por cierto, no uses "#!/bin/sh", usa "#!/bin/bash", a no ser que sepas que es una construcción universal.
Eso era por una exigencia de koxkorrita. Ha especificado que era, y cito textualmente "en un script de shell (/bin/sh)". Soy inocente, señoría OO:-)
Hay algunas distros que han pensado o han cambiado la shell por defecto, a otra más liviana que el bash, precisamente para acelerar el arranque (es la discusión previa a lo del upstart ese), y se encontraron con el problema de que algunos scripts "oficiales" no funcionaban. Tenían que, o bien especificar bash, o cambiar el script para que fuera con la nueva shell (y son scripts que a veces vienen de "upstream", lo que añade una cosa más a mantener en cada distro).
Así que es mejor especificarla. Si alguien luego quiere usar el script con otra shell, que lo cambie.
Es que me sospecho que esa construcción "for" es específica del bash, y es posible que hasta sea relativamente reciente.
Oído cocina, "bash" pues :-) Saludos, -- Camaleón -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 El 2010-03-26 a las 22:02 -0000, Camaleón escribió:
El Fri, 26 Mar 2010 22:29:00 +0100, Carlos E. R. escribió:
¡Ostrás! ¿Tan facil? ¿Desde cuando se puede hacer así, eso es desde siempre?
:-??
Hum... yo lo he leído en el manual:
En el de ahora estará, sin duda. Lo que no sé es si estará en los antiguos, o es una construcción reciente. No lo sé, igual me quivoco. Hay varios scripts en el "/etc/init.d/" que lo usan, así que es posible que me equivoque y simplemente no lo conocía.
La tuya se ejecuta más rápido, me la quedo ;-)
X-)
Es que es interna, lo del "seq 1 100" lo que hace es llamar a un comando externo que genera la lista entera del 1 al 100. Tengo un ficherito, bin/0_script_constructs, donde voy guardando construcciones interesantes, porque buscarlas en el manual no es rápido. Y allí está ahora la tuya ;-)
Por cierto, no uses "#!/bin/sh", usa "#!/bin/bash", a no ser que sepas que es una construcción universal.
Eso era por una exigencia de koxkorrita. Ha especificado que era, y cito textualmente "en un script de shell (/bin/sh)". Soy inocente, señoría OO:-)
Observa: #!/bin/ash for((i=0;i<100;i++)) do echo $i done :~> ./bash_test_for ./bash_test_for: 2: Syntax error: Bad for loop variable :~> Con zsh: ./bash_test_for:2: parse error near `)' Con ksh funciona. Con "csh" no: Badly placed ()'s. Hay varias shells, las listan en "/etc/shells". El /bin/sh es un enlace simbólico que en suse y la mayoría de distros es bash, pero eso puede cambiar. Para ser quisquilloso, koxkorrita debería decir a donde apunta su /bin/sh >:-) - -- Saludos Carlos E. R. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) iEYEARECAAYFAkutRmUACgkQtTMYHG2NR9UTYgCfXvm4s0adZiRaROn139WcQ0jh tN4AoJR/Zl5fjI3g4Fb0DTsvO+pfHNZX =i28E -----END PGP SIGNATURE-----
On Viernes, 26 de Marzo de 2010 22:29:00 Carlos E. R. escribió:
Content-ID: <alpine.LSU.2.00.1003262218490.1061@nimrodel.valinor>
El 2010-03-26 a las 11:08 -0000, Camaleón escribió:
El Fri, 26 Mar 2010 11:35:32 +0100, koxkorrita escribió:
esto para algunos será muy sencillo pero nunc alo he hecho. enun script shell (/bin/sh) como puedo hacer un for? es decir (for(int i = 0;i<100;i++){})
*** #!/bin/sh for((i=0;i<100;i++)) do echo $i done ***
¡Ostrás! ¿Tan facil? ¿Desde cuando se puede hacer así, eso es desde siempre?
No me lo sabía, yo usaba esto:
for X in `seq 1 100`; do echo $X done
que es estructuralmente parecida a esta:
for FILES in filename1 filename2 filename3 do gzip $FILES done }
La tuya se ejecuta más rápido, me la quedo ;-)
Por cierto, no uses "#!/bin/sh", usa "#!/bin/bash", a no ser que sepas que es una construcción universal. Hay algunas distros que han pensado o han cambiado la shell por defecto, a otra más liviana que el bash, precisamente para acelerar el arranque (es la discusión previa a lo del upstart ese), y se encontraron con el problema de que algunos scripts "oficiales" no funcionaban. Tenían que, o bien especificar bash, o cambiar el script para que fuera con la nueva shell (y son scripts que a veces vienen de "upstream", lo que añade una cosa más a mantener en cada distro).
Así que es mejor especificarla. Si alguien luego quiere usar el script con otra shell, que lo cambie.
Es que me sospecho que esa construcción "for" es específica del bash, y es posible que hasta sea relativamente reciente.
Juas!! Lo acabo de ver y tb he flipado... yo tb tiraba de for a in $(seq 1 10); do echo hola; done... -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org
participants (4)
-
Angel
-
Camaleón
-
Carlos E. R.
-
koxkorrita@laudio.info