Uso de condicionales (if) poco frecuentes

De Gruvi

Tabla de contenidos

Operadores condicionales

es igual NO es igual es menor que es mayor que
= != < >


NO es igual al valor nulo (longitud mayor que 0) tiene un valor nulo (longitud 0)
-n -z


se cumple No se cumple
if [ condición] if ! [ condición ]


Determinar si es "root/administrador" quien ejecuta

si [ usuario NO es "root" ]; entonces

Se ejecuta un proceso/instrucción

cierre

if [ $(whoami) != "root" ];  then
	Xdialog --title "$(gettext "WARNING")" \
		--ok-label "$(gettext "OK")" \
		--icon $ICONS/importante.xpm \
		--msgbox "$(gettext "MiniNo_Date-Time requires root priviledges! Be careful!")" 0 0 0	
	exit 1
fi


Determinar si un proceso está en ejecución

si [ "existe el proceso)" ]; then

Cuando se encuentra el proceso (está en ejecución) se ejecuta un proceso/instrucción

sinó (no existe/encuentra)

Cuando No se encuentra el proceso (NO está en ejecución) se ejecuta otro proceso/instrucción

cierre

if [ "$(pidof nombre_proceso)" ]; then 
 # proceso encontrado 
else 
 # proceso no encontrado
fi


Determinar si existe un directorio/fichero/programa en el sistema

si [ (existe) fichero "/ruta/al/fichero" ]; entonces

Se ejecuta un proceso/instrucción

cierre

si es distinto [ fichero "/ruta/al/fichero" ]; entonces

Se ejecuta un proceso/instrucción

cierre

# Reasignamos ruta si fuese necesario y comprobamos la existencia de hwclock. 
HWCLOCK=/sbin/hwclock
if [ -f "/usr/sbin/hwclock" ];then
  HWCLOCK=/usr/sbin/hwclock
fi 

if ! [ -f $HWCLOCK ] ; then
   Xdialog --title "$TITLE" --icon $ICONS/danger.xpm --msgbox "$MSG1 $HWCLOCK" 0 0
   exit 0
fi


Tabla de operadores

-e fichero Verdadero si fichero existe.
-d fichero Verdadero si fichero existe y es un directorio.
-f fichero Verdadero si fichero existe y es un fichero regular.
-L fichero Verdadero si fichero existe y es un enlace simbólico.
-r fichero Verdadero si fichero existe y se puede leer.
-w fichero Verdadero si fichero existe y se puede escribir.
-x fichero Verdadero si fichero existe y tiene permisos de ejecución (o de busqueda si es un directorio)
-O fichero Verdadero si eres el dueño del fichero
-G fichero Verdadero si el grupo del fichero es igual al tuyo.
fichero1 -nt fichero2 Verdadero si fichero1 es más reciente (según la fecha de modificación) que fichero2.
fichero1 -ot fichero2 Verdadero si fichero1 es más antiguo que fichero2.
fichero1 -ef fichero2 Verdadero si fichero1 y fichero2 tienen el mismo número de device e inodo.


AND / OR — && / ||

si [ a = b ] Y [ b != c ]; entonces ...

if [ -z "`ls $LOG`"i ] && [ -z "`ls $BACKUP`" ]; then
  echo "No queda espacio"
else
  echo "Aún hai espacio"
fi 

si [ a = b ] O [ c != d ]; entonces ...

if [ /etc/passwd -nt timestamp ] || [ /etc/shadow -nt timestamp ]; then
  echo SI
fi

Podemos hacer combinaciones del tipo

if condición1 || condición2 && condición3; then


Referencias

http://www.linuxtutorialblog.com/post/tutorial-conditions-in-bash-scripting-if-statements

http://www.bash-hackers.org/wiki/doku.php/syntax/ccmd/conditional_expression