Re: Pregunta tonta de Bash [SOLUCIONADO]
El Miércoles, 8 de Noviembre de 2006 23:59, César Rincón escribió:
> Iñaki wrote:
> > PD: Mi problema es que me estoy mal acostumbrando con la maravillosa
> > programación en Ruby, y hacer un "if" en Bash me empieza a resultar un
> > infierno ;)
>
> Je. Ruby es la berraquera, en efecto... ¿qué les costaba ponerle un
> "unless" a Bash? :)
>
> Pero Bash no es tan malo... y de hecho es bastante consistente. Creo
> que parte del problema es que estás ignorando un detalle importante:
> esos corchetes '[', ']' que pones alrededor de la "condición", realmente
> no son parte de la sintaxis de if.
>
> El '[' es de hecho un comando. Es un sinónimo para el comando "test";
> ve su manual: test(1). El ']' final es ignorado; se te deja usarlo para
> que la condición no se vea fea.
>
> Cuando escribes
>
> if [ false ] ; then echo "verdadero"; fi
>
> le estás pidiendo a 'if' que evalúe el comando 'test false', y ejecute
> las instrucciones tras el 'then' si 'test false' devuelve cero.
>
> Y la consola responde con "verdadero". Eso es porque la evaluación de
>
> test false
>
> es verdadera (e.g. devuelve 0), lo mismo que test true, test x, test 0,
> etc.:
>
> if [ true ] ; then echo "cierto"; fi
> --> cierto
> if [ false ] ; then echo "cierto"; fi
> --> cierto
>
> test no intenta ejecutar sus parámetros; asume que son cadenas. Llamar
> a test con un parámetro produce verdadero siempre que el parámetro no
> sea la cadena vacía (ve test(1))
>
> 'if' ejecuta lo que pongas en el then si la "lista" que le das a
> ejecutar como condición devuelve 0 (ve en el manual bash(1) la
> definición de una "lista": es muy esclarecedora).
>
> Lo que pides, pues, se puede poner como
>
> if ! which top >/dev/null ; then
> echo "no hay top!"
> exit 1
> fi
>
> Nota la ausencia de '['. Nota también el espacio entre el '!' y
> 'which', que es importante.
>
> O claro, se puede hacer también de todas las maneras que la gente ha
> sugerido :-)
Impresionante explicación. Esta va directa a mi disco duro ;)
Pues no, no tenía ni idea del significado de [ en bash, pensaba que era parte
de la sintaxis (obligatoriamente).
Mil gracias de nuevo por la perfecta explicación. Saludos.
--
Iñaki
Por el bien de todos respetemos las normas de la lista:
http://wiki.debian.org/NormasLista
Reply to: