Com utilitzar funcions en Bash

Com utilitzar funcions en Bash mitjançant aquest llenguatge informàtic basat en la shell d'Unix i compatible amb POSIX. Com a llenguatge la seva funció consisteix en la interpretació de les ordres de Linux, permetent automatitzar els nostres processos repetitius i també crear ordres a partir de la ordres de sistema operatiu. En aquest article repassarem com utilitzar les funcions en Bash. Recomano llegir l'article com crear els teus propis scripts usant Bash.

Al scritp que proposem fem servir el llenguatge Bash per busar un arxiu a partir coneixent el seu nom. Per a això farem servir el ordre find però ajudant-nos de les funcions prèviament definides en aquest script. Cal tenir en compte una peculiaritat o limitació de Bash que no està present en tots els llenguatges: per cridar a una funció aquesta ha d'estar definida prèviament.

definir funcions

Hi ha dues maneres de definir les funcions: amb o sense la declaració function:

function nombre_funcion () 
{
    # codigo
}

o bé aquesta altra, que és la que jo faig servir com veuràs més endavant.

nombre_funcion ()
{
    # codigo
}

Així mateix Bash també proveeix un mètode per passar paràmetres i retornar resultats que veurem en propers articles.

#!/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àlisi de l'script

Definicions

per Bash tot procés acabat amb èxit ha de tenir el codi «0» com a senyal. En les línies 12 i 13 es defineixen els codis d'error manejats EXIT_OK per èxit y EXIT_BAD per sortida en cas de fallada.

A les línies 15 i 16 s'assignen a les variables PATRON i DIRECTORI els paràmetres primer ($ 1) i segon ($ 2) que apareixen a la línia de comandaments després del nom de l'script com veurem més endavant quan ho executem.

En la línia 18 vam crear la nostra primera funció. La funció anomenada «autor» mostra per consola la autoria de l'script quan ho cridem amb l'argument «-a» com es pot veure en el if a les línies 50 ~ 54. l'argument «-I» de la línia 23 permet mostrar la seqüència de «següent línia» mitjançant la codificiación «\ n».

La crida a noparams (línies 28 ~ 37) s'encarrega de gestionar els successos que han d'ocórrer quan l'script és cridat sense cap paràmetre. Mostrem degudament tancat entre codis de nova línia, un missatge indicant que l'script ha de ser executat amb dos paràmetres, seguidament es mostra una opció (línia 31) per mitjà llegir que insta a prémer «S» o «s» en cas de voler mostrar l'ajuda. En la línia 32 diem literalment: 'si la resposta (que ens arriba a la variable $ REPLY) Conté qualsevol dels caràcters aquest majúscula o minúscula ', llavors (línia 33) mostra una línia buida (línia 34) i executa la funció ajuda (línies 23 ~ 26).

La funció nodir (línies 39 ~ 42) serà executada quan detectem que el directori on s'intenta fer la cerca no existeixi.

Funcionalitat

Amb això ja tenim definides totes les funcions necessàries per executar el nostre programa, que realment comença a la línia 44 comprovant si el primer dels paràmetres que rep el script és «-h», en cas de ser cert executa la funció ajuda i surt indicant una terminació normal.

Si PATRÓ (primer paràmetre segons hem descrit en la línia 15) és «-a», es mostra l'autor seguint el mateix mecanisme explicat en el paràgraf anterior per a l'opció «-h».

En la línia 56 es controla que no ens hagi arribat menys de dos paràmetres, En aquest cas, s'executa la funció noparams, seguidament, al if de la línia 60 vam esbrinar si existeix el directori sobre el qual volem fer la cerca, En cas d'existir es mostra una línia buida, el ordre find amb la direcció de directori sobre el qual volem efectuar la búsquda seguit del patró (començament de el nom de l'arxiu que estem buscant) una nova línia en blanc i mitjançant èxit $? confiem la sortida del nostre script a el resultat produït per find. En cas que la condició de existència de directori sigui falsa (Línia 67) fem una crida a la funció nodir i sortim indicant una terminació anormal.

Execució i proves

$ encontrar
$ encontrar -a
$ encontrar -h
$ encontrar index aljflaskjf #directorio no existe
$ encontrar index public_html
$

En següents articles sobre Bash veurem els mecanismes per utilitzar paràmetres en les funcions, Així mateix veurem la forma de articular dades de retorn de les mateixes.

Espero i desitjo que aquest post hagi estat d'utilitat per a vosaltres.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Jose va dir

    Hola,
    molt interessant i molt claret.
    Només un apunt; cal un $ en la línia 68 enfront de la variable EXIT_BAD.
    Vaig a seguir aprenent segur amb els teus articles.