Come utilizzare le funzioni in Bash

Come utilizzare le funzioni in Bash utilizzando questo linguaggio per computer basato su shell Unix e conforme a POSIX. Come linguaggio, la sua funzione consiste nell'interpretazione dei comandi di Linux, permettendoci di automatizzare i nostri processi ripetitivi e anche di creare comandi dai comandi del sistema operativo. In questo articolo esamineremo come usare le funzioni in bash. Consiglio di leggere l'articolo come crea i tuoi script usando bash.

Nello script che proponiamo utilizziamo il linguaggio Bash per cercare un file, conoscendone il nome. Per questo useremo il file trova comando ma con l'aiuto delle funzioni precedentemente definite in detto script. Devi tenere conto di una particolarità o limitazione di Bash che non è presente in tutte le lingue: per chiamare una funzione è necessario definirla precedenza.

Definisci le funzioni

Esistono due modi per definire le funzioni: con o senza la dichiarazione di funzione:

function nombre_funcion () 
{
    # codigo
}

o quest'altra, che è quella che uso come vedrai più avanti.

nombre_funcion ()
{
    # codigo
}

anche Bash fornisce anche un metodo per passare parametri e restituire risultati. che vedremo nei prossimi articoli.

#!/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


Analisi del copione

Definizioni

Per bash ogni processo completato con successo deve avere il codice "0" come segnale. Le righe 12 e 13 definiscono i codici di errore gestiti EXIT_OK per il successo y EXIT_BAD per l'uscita in caso di errore.

Nelle righe 15 e 16, alle variabili PATTERN e DIRECTORY vengono assegnati il ​​primo ($ 1) e il secondo ($ 2) parametri che compaiono sulla riga di comando dopo il nome dello script, come vedremo più avanti quando lo eseguiremo.

Qui alla 18 on-line creiamo la nostra prima funzione. La funzione chiamata «autore» mostra il file paternità della sceneggiatura quando lo chiamiamo con l'argomento "-a" come puoi vedere nelle righe 50 ~ 54. L'argomento "-e" dalla riga 23 permette di mostrare la sequenza della «riga successiva» codificando «\ n».

La chiamata a noparams (righe 28 ~ 37) ha il compito di gestire gli eventi che devono verificarsi quando lo script viene chiamato senza alcun parametro. Mostriamo, opportunamente racchiuso tra i nuovi codici di riga, un messaggio che indica che lo script deve essere eseguito con due parametri, quindi viene mostrata un'opzione (riga 31) da utilizzare read Ti viene chiesto di premere "S" o "s" nel caso in cui desideri mostrare la guida. Nella riga 32 diciamo letteralmente: 'se la risposta (che ci arriva nella variabile $ RISPOSTA) contiene uno qualsiasi dei caratteri in maiuscolo o minuscolo ', quindi (riga 33) mostra una riga vuota (riga 34) ed esegue la funzione di aiuto (righe 23 ~ 26).

La funzione nodir (righe 39 ~ 42) verrà eseguita quando rileviamo che la directory in cui viene tentata la ricerca non esiste.

Funzionalità

Con questo abbiamo già definito tutte le funzioni necessarie per eseguire il nostro programma, che in realtà parte dalla riga 44, controllando se il primo dei parametri che lo script riceve è "-h", se è vero, esegui la funzione di aiuto e esce indicando una terminazione normale.

Se PATTERN (il primo parametro descritto nella riga 15) è "-a", l'autore viene visualizzato seguendo lo stesso meccanismo spiegato nel paragrafo precedente per l'opzione "-h".

Sulla linea 56 è controllato che non abbiamo ricevuto meno di due parametriIn questo caso, viene eseguita la funzione noparams, quindi nel if della riga 60 lo scopriamo se la directory su cui vogliamo fare la ricerca esiste, se esiste, viene visualizzata una riga vuota, il trova comando con l'indirizzo della directory su cui vogliamo effettuare la ricerca seguito dallo schema (inizio del nome del file che stiamo cercando) una nuova riga vuota e utilizzando uscita $? affidiamo l'output del nostro script al risultato prodotto da find. Nel caso in cui la condizione di l'esistenza della directory è falsa (riga 67) chiamiamo la funzione nodir e usciamo indicando una terminazione anomala.

Esecuzione e test

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

En seguenti articoli su Bash vedremo i meccanismi per utilizzare i parametri nelle funzioniVedremo anche come farlo articolare i dati di ritorno stessa.

Spero e spero che questo post ti sia stato utile.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Josea suddetto

    Ciao,
    molto interessante e molto chiaro.
    Solo una nota; un $ manca nella riga 68 davanti alla variabile EXIT_BAD.
    Continuerò a imparare di sicuro con i tuoi articoli.