|
Para afianzar nuestros conceptos aprenderemos 2 herramientas muy Ăștiles para programar y que se desenvuelven perfectamente en Bash. Aprender a crear funciones y definir tuberĂas puede parecer complejo al principio, pero luego veremos la inmensa utilidad que nos proveen. |
TuberĂas (pipes)
Concretamente y sin dar muchas vueltas, una tuberĂa es un mĂ©todo que permite dirigir la salida de un proceso como la entrada de otro, lo cual permite una serie de ventajas, como reducir las lĂneas de cĂłdigo, prescindir de variables de almacenamiento de resultados y mejorar la eficiencia del script.
Una tuberĂa se reconoce generalmente por poseer el sĂmbolo | que permite concatenar expresiones; si bien es usada por defecto, existen otras formas de crear tuberĂas.
Ejemplo: imprimir mensajes recientes del kernel
#dmesg permite ver los mensajes recientes del kernel y drivers cargados #durante el booteo del sistema; tail imprime las Ășltimas partes de un archivo o #comando
dmesg | tail
Si bien se pueden complicar tanto como queramos, la estructura bĂĄsica de una tuberĂa permite que el resultado de un comando sea usado como entrada del siguiente, el cual puede proveer la entrada de un nuevo comando si seguimos agregando tuberĂas consecutivas.
Funciones
Las funciones son un conjunto de sentencias que se agrupan para poder ser ejecutadas varias veces sin tener q volver a escribirlas. Es equivalente a pensar que cuando aprendemos a cocinar un tipo de comida escribiremos su receta en una hoja, y cada vez que deseamos cocinar esa comida consultamos la receta en lugar de volver a escribir una nueva hoja con la misma receta.
QuizĂĄs lo mĂĄs importante de las funciones es la posibilidad de pasarle parĂĄmetros, datos que estas usarĂĄn para procesarlos y generar una salida. Su estructura es la siguiente:
function nombre-de-la-funciĂłn {
procesos
}
Ejemplo: funciĂłn que muestra los servicios que funcionan sobre el protocolo tcp. TambiĂ©n podemos ver cĂłmo aplicar mĂĄs tuberĂas.
#Definimos un nombre de funciĂłn, puede ser el que nos guste.
function servicios_tcp {
#cat concatena y muestra el contenido de la carpeta /etc/services, que es la #que contiene todos los servicios con sus puertos asociados.
#el primer grep toma la lista y elimina los comentarios, con âv invertimos el resultado
#el segundo grep muestra solo los relacionados a tcp
cat /etc/services | grep âv â^#â | grep tcp
}
Cuando necesitemos ejectuar esta funciĂłn solo tenemos que llarmarla por su nombre:
servicios_tcp
En este caso funciona sin parĂĄmetros; en el caso de que los tenga debemos agregarlos para que la funciĂłn trabaje adecuadamente, caso contrario la funciĂłn no funcionarĂĄ adecuadamente. El uso de return permite a una funciĂłn devolver un valor como resultado del proceso.
Ejemplo: funciĂłn con parĂĄmetros de entrada que calcula la suma de 2 nĂșmeros.
#!/bin/bash
function suma()
{
#con let podemos ejecutar la operaciĂłn dentro de las comillas
let "resultado=$1 + $2"
#return permite devolver el valor entero. Una vez ejecutado el return, el valor quedarĂĄ depositado dentro de la variable $?
return $resultado;
}
Â
#se llama a la funciĂłn suma y pasamos 2 parĂĄmetros de entrada.
suma 2 3
#se imprime el valor de $? con echo evaluando el valor real de la variable entre comillas
echo -e "Resultado = $?";