Como usar as funcións en Bash

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.


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

Un comentario, deixa o teu

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.

  1.   josea dixo

    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.