Las funciones, una característica poderosa de la programación de shell, son un grupo de comandos organizados por funcionalidad común. Estas unidades fáciles de administrar, cuando se las llama, devuelven un solo valor y no generan nada. El uso de una función implica dos pasos:
1. Definición de la función
2. Invocando la función
Función de shell frente a alias de shell
Las funciones de shell y los alias son diferentes en dos aspectos.
– los alias no toman argumentos como lo hacen las funciones.
– si un nombre de comando se define como una función y un alias, el alias tiene prioridad.
Mostrar funciones de shell
Para mostrar las definiciones de función, use el siguiente comando:
# typeset -f list () { ls --color=auto -al | wc -l } num () { who | wc -l }
Definición de una función
Una función se define utilizando el siguiente formato general:
# function [function name] { command; . . . command; }Nota :Debe aparecer un espacio después de la llave de apertura y antes de la llave de cierre.
El siguiente ejemplo define una función llamada num que muestra el número total de usuarios actualmente conectados al sistema. La función num ejecuta el comando who, cuya salida se dirige al comando wc.
$ function num { who | wc -l; }
Funciones de shell en scripts de shell
Las funciones no solo son útiles en los scripts de shell, sino que también se utilizan en situaciones de línea de comandos en las que un alias no se puede utilizar. A modo de demostración, las funciones de shell se ejecutan en la línea de comandos para ilustrar cómo funcionan las funciones.
El siguiente ejemplo crea una función llamada lista que muestra el número total de subdirectorios y archivos en el directorio actual. La función de lista llama al comando ls, cuya salida se dirige al comando wc:
$ function list { ls -al | wc -l; }
$ list 34
Invocar una función
Puede invocar una función simplemente ingresando el nombre de la función en la línea de comando o dentro del script de shell.
$ [function name]
Por ejemplo, para invocar la función num en la línea de comando, use el siguiente comando.
$ num