Pregunta

¿Cuál es la diferencia:

if IsServerStarted ; then ...

y

if [ IsServerStarted -eq 0 ] ; then ...

Me parece que estas dos afirmaciones deben ser equivalentes? Curiosamente la segunda afirmación es siempre verdad.

¿Fue útil?

Solución

La siguiente ejecuta la función Shell o ejecutable en $PATH llamado IsServerStarted, y si su código de salida es 0 (es decir, verdadera), se ejecuta la rama then. Si no existe una función o tal ejecutable, el código de salida será no 0 (es decir, falsa) y la rama then será omitida.

if IsServerStarted ; then ...

La siguiente tiene [ (aka test) comprobación de si IsServerStarted es un número entero igual a 0, que (IsServerStarted ni siquiera que contiene un solo dígito) es siempre false . Por lo tanto, las salidas [ con un no-0 (falso es decir) de código y la rama then siempre se omiten.

if [ IsServerStarted -eq 0 ] ; then ...

Otros consejos

En realidad, la segunda dará un error quejaba de que "IsServerStarted" no es un número entero válido. Se considera una constante de cadena así que algo como

var="IsServerStarted"
if [ IsServerStarted == "$var" ] ; then

tendría éxito (o fracaso si no era igual).

Ndim es correcta con respecto a la función ejecutable o en el primer ejemplo que diste.

Un par más variaciones a considerar:

if $IsServerStarted ; then ...

En que uno, el if se evalúa sobre la base del valor de retorno de un comando (ejecutable o función) que está contenida en la variable IsServerStarted. Por lo que podría establecer IsServerStarted=true y luego el if tendría éxito, ya true es una cáscara orden interna que devuelve siempre es cierto. También podemos establecer IsServerStarted='grep popsicle freezer' and theif` pasaría o no dependiendo de si usted estaba fuera de golosinas.

if [ $IsServerStarted -eq 0 ]; then ...

Esto simplemente comprueba si la variable es igual a cero. Si no es un entero válido que causará un mensaje de error.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top