Como usar funcións en Bash usando esta linguaxe informática baseada en shell Unix, compatible con POSIX. Como linguaxe, a súa función consiste na interpretación de comandos de Linux, o que nos permite automatizar os nosos procesos repetitivos e tamén crear comandos a partir dos comandos do sistema operativo. Neste artigo revisaremos como usar as funcións en bash. Recomendo a lectura do artigo como crea os teus propios scripts usando bash.
No guión que propoñemos empregamos a linguaxe Bash para buscar un ficheiro, sabendo o seu nome. Para iso usaremos o atopar comando pero coa axuda das funcións definidas previamente no devandito guión. Ten que ter en conta unha peculiaridade ou limitación de Bash que non está presente en todos os idiomas: para chamar a unha función debe definirse previamente.
Definir funcións
Hai dúas formas de definir funcións: con ou sen a declaración de funcións:
function nombre_funcion () { # codigo }
ou este outro, que é o que uso como verás máis adiante.
nombre_funcion () { # codigo }
Tamén Bash tamén ofrece un método para pasar parámetros e devolver resultados. que veremos en futuros artigos.
#!/usr/bin/env bash # ~/.bin/encontrar # encuentra archivos a partir de la descripción de su nombre en un directorio específico # # Por Pedro Ruiz Hidalgo # version 1.0.0 # Copyright © enero 2017 # # EXIT_OK=0 EXIT_BAD=66 PATRON=$1 DIRECTORIO=$2 autor () { echo -e "\nPedro Ruiz Hidalgo @petrorum. Copyright © 2017\n" } ayuda () { echo -e "\nencontrar [PATRON] [DIRECTORIO]\n" } noparams () { echo -e "\nSon necesarios dos parámetros\nencontrar -h para ayuda\n" read -p "¿Quieres ver la ayuda? (S|s)" -n 1 -r if [[ $REPLY =~ ^[Ss]$ ]]; then echo "" ayuda fi } nodir () { echo -e "\nDirectorio no Existe\n" } if [[ $PATRON == "-h" ]]; then ayuda exit $EXIT_OK fi if [[ $PATRON == "-a" ]]; then autor exit $EXIT_OK fi if [ $# -lt 2 ]; then noparams else if [ -d $DIRECTORIO ]; then echo "" find $DIRECTORIO -name $PATRON* echo "" exit $? else nodir exit EXIT_BAD fi fi
Análise de guións
Definicións
Para bash cada proceso completado correctamente debe ter o código "0" como sinal. As liñas 12 e 13 definen os códigos de erro tratados EXIT_OK para o éxito y EXIT_BAD para saír en caso de fallo.
Nas liñas 15 e 16 as variables PATRÓN e DIRECTORIO teñen asignados os primeiros parámetros ($ 1) e segundo ($ 2) que aparecen na liña de comandos despois do nome do script, como veremos máis adiante cando o executemos.
No liña 18 creamos a nosa primeira función. A función chamada «autor» amosa o autoría de guión cando o chamamos co argumento "-a" como se pode ver no if nas liñas 50 ~ 54. O argumento "-e" da liña 23 permite amosar a secuencia da «seguinte liña» codificando «\ n».
A chamada a noparams (liñas 28 ~ 37) é a encargada de xestionar os eventos que deben ocorrer cando se chama ao script sen ningún parámetro. Amosamos, debidamente incluído entre novos códigos de liña, unha mensaxe que indica que o script debe executarse con dous parámetros, entón móstrase unha opción (liña 31) para usar ler Pídelle que prema "S" ou "s" por se quere amosar axuda. Na liña 32 dicimos literalmente: 'se a resposta (que nos vén na variable $ RESPOSTA) contén algún dos caracteres que maiúsculas ou minúsculas ', entón (liña 33) mostra unha liña baleira (liña 34) e executa a función de axuda (liñas 23 ~ 26).
A función nodir (liñas 39 ~ 42) executarase cando detectemos que o directorio onde se intenta a busca non existe.
Funcionalidade
Con isto xa o temos definiu todas as funcións necesarias para executar o noso programa, que realmente comeza na liña 44, comprobando se o primeiro dos parámetros que recibe o script é "-h", se é certo, execute a función de axuda e saídas que indican a finalización normal.
Se PATTERN (primeiro parámetro tal e como describimos na liña 15) é "-a", o autor móstrase seguindo o mesmo mecanismo explicado no parágrafo anterior para a opción "-h".
Na liña 56 contrólase que non recibimos menos de dous parámetrosNeste caso, execútase a función noparams, entón no if da liña 60 descubrimos se existe o directorio no que queremos facer a busca, se existe, móstrase unha liña baleira, o atopar comando co enderezo do directorio no que queremos realizar a busca seguido do patrón (comezo do nome do ficheiro que buscamos) unha nova liña en branco e empregando saír de $? confiamos a saída do noso guión ao resultado producido por find. No caso de que a condición de a existencia do directorio é falsa (liña 67) facemos unha chamada á función nodir e saímos indicando unha terminación anormal.
Execución e proba
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En seguintes artigos sobre Bash veremos os mecanismos para usar parámetros en funciónsTamén veremos como facelo articular datos de devolución do mesmo.
Espero e espero que esta publicación te sexa útil.
Un comentario, deixa o teu
Ola,
moi interesante e moi claro.
Só unha nota; falta un $ na liña 68 diante da variable EXIT_BAD.
Seguirei aprendendo seguro cos teus artigos.