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

