En UNIX existen expresiones o estamentos que se pueden usar en la línea de comandos y que pueden ejecutar una acción u otra dependiendo de ciertas condiciones, o ejecutar una tarea un número de veces determinado. Las expresiones más habituales son:
ASIGNACION: Asigna un valor (numérico o cadena de caracteres) a una variable.
MANIPULACION DE NUMEROS: Permite realizar las operaciones básicas con números:
donde objeto1 y objeto2 pueden ser núneros o variables numéricas. La formas ((...)) y let son equivalentes, y son del orden de 30 a 60 veces más rápidas que la forma expr.
Las operaciones aritméticas válidas, en orden de prececedencia se reflejan en la siguiente tabla:
| Operaciones | Significado |
|---|---|
| - | menos unario |
| ! | negación logica |
| ~ | negación bitwise |
| *, /, % | multiplicación, división, resto (modulo) |
| +, - | suma, resta |
| <<, >> | left shift, right shift |
| <=, < | menor o igual que, menor que |
| >=, > | mayor o igual que, mayor que |
| == | igual |
| != | distinto |
| & | AND bitwise AND |
| ^ | XOR o OR exclusivo bitwise |
| | | OR bitwise |
| && | AND logico |
| || | OR logico |
| = | asignación |
| *=, /=, %= | asignación multiplicación, asignación división, asignación modulo |
| +=, - | incremento, decremento |
| <<=, >>= | asignación left shift, asignación right shift |
| &=, ^=, |= | asignación AND bitwise, asignación XOR bitwise, asignación OR bitwise |
| (...) | agrupación (empleada para evitar las reglas de precedencia naturales) |
TEST: Prueba si es cierta una condición, devolviendo TRUE (0) o FALSE (1):
En la condición, para comparar se utilizarán los siguientes operadores:
IF: Si condicional. Si la condición que se prueba es cierta se realiza una acción o acciones, y si es falsa se realizan otras.
if condicion then acciones else otras acciones fi
CASE: En caso de que una variable tome un valor hacer una acción, en caso de que tome otro otra, etc. Equivale a varios if anidados.
case variable in valor_1) accion 1; accion 2;; valor_2) accion 3;; *) accion;; esac
WHILE: Mientras se cumpla la condición especificada se ejecutarán las acciones contenidas en el interior del bucle.
while condicion do acciones done
UNTIL: Las acciones especificadas se ejecutarán hasta que se cumpla la condición. Until se puede utilizar como la negación de la condición de while.
until condicion do acciones done
FOR: Para la lista de argumentos dada, ejecutará el contenido del bucle.
for i in lista do acciones done
FUNCIONES: Se emplean para realizar tareas que tengan cierta entidad por si solas y que se ejecuten más de una vez. Permiten reutilizar código y ahorrar líneas de programa, a la vez que reducen el tamaño del programa. Se declaran del siguiente modo:
function nombre ()
{
acciones;
}
nombre ()
{
acciones;
}
Para llamarlas solo habrá que utilizar su nombre seguido de los posibles argumentos (como si se llamara a un programa más):
Una función puede llamar a otras funciones o programas, o llamarse a si misma (recursividad). En el caso de usar funciones que se llamen a si mismas, o funciones recursivas, hay que tener especial cuidado con las condiciones de salida, con el fin de no entrar en un bucle infinito.
Las funciones pueden definirse dentro de un shell script, en cuyo caso solo son accesibles desde ese shell script, o bien en archivos independientes (ejecutables) que sean invocados desde los shell scripts mediante una orden del tipo ". /directorio/archivo_funciones". También se puede ubicar una función por archivo (con el mismo nombre que la función) y todos los archivos de funciones en un directorio (que solo contendrá archivos de funciones) que se indicará en la variable de entorno FPATH (export FPATH=/usuario/dir_funciones). En este último caso las funciones serán accesibles desde la línea de comandos y cualquier shell script que las utilice si el usuario tiene correctamente definida la variable FPATH.