Busindre » Blog Archive » Expresiones Condicionales en los Shell Scripts (Todas)

Expresiones Condicionales en los Shell Scripts (Todas)

January 16th, 2008 by Busindre

La red esta llena de manuales sobre "Shell Scripting", donde muestran unas pocas expresiones condicionales, por norma las más usadas y populares, pero no todas las que hay y muchas veces se pierde un tiempo precioso buscando la que justamente necesitamos o alguna que desconocemos al visualizar algún script del sistema que requerimos de entender. Para ver todas las "condiciones" que podemos usar en scripts sin necesidad de consultar Internet o algún tutorial impreso, tenemos el manual de test, el cual podemos consultar rápidamente de la siguientes dos formas.


# man test
# info test

Esto nos mostrará todas las posibles expresiones condicionales que podemos usar en nuestros scripts de shell. Esto además permite poder completar rápidamente por ejemplo ciertos scripts de GNU/Linux para ponerlos más a nuestro gusto. Veamos un sencillo ejemplo de un sistema slackWare y el script de arranque de acpi .(/etc/rc.d/rc.acpi)

XML:
#!/bin/sh
# Start/stop/restart acpid.

# Start acpid:
acpid_start() {
  if [ -x /usr/sbin/acpid -a -d /proc/acpi ]; then
    echo "Starting ACPI daemon:  /usr/sbin/acpid"
    /usr/sbin/acpid
  fi
}

Estudiamos la sentencia -x /usr/sbin/acpid -a -d /proc/acpi . Se nos plantean estas expresiones condicionales -a -x -d y que según un rápido vistazo a "man test" nos muestra:

-a : EXPRESSION1 -a EXPRESSION2 (both EXPRESSION1 and EXPRESSION2 are true)
-x FILE : FILE exists and is executable
-d FILE : FILE exists and is a directory

Resumiendo, esto nos quiere decir que se deben cumplir dos condiciones para arrancar el comando el demonio acpid (/usr/sbin/acpid). La primera es que se cumpla que existe un ejecutable en la ruta /usr/sbin/acpid y que existe un directorio denominado/proc/acpi. De no cumplirse alguna de las dos condiciones, el comando "# /etc/rc.d/rc.acpi start" no devuelve nada y puede llevar a confusión. Ahora que sabemos que hace esa parte del script podemos modificar ese párrafo por este otro, dejándolo más completo avisándonos si el comando start no arranca acpid.

XML:
#!/bin/sh
# Start/stop/restart acpid.

# Start acpid:
acpid_start() {
  if [ -x /usr/sbin/acpid -a -d /proc/acpi ]; then
    echo "Starting ACPI daemon:  /usr/sbin/acpid"
    /usr/sbin/acpid
  else
  echo "Error buscando /usr/sbin/acpid y /proc/acpi";
  fi
}

Posted in Curiosidades |

Leave a Comment

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.