Kako koristiti funkcije u Bashu

Kako se koriste funkcije u Bashu pomoću ovog računalnog jezika koji se temelji na ljusci Unixa, usklađenom s POSIX-om. Kao jezik, njegova se funkcija sastoji od interpretacije Linux naredbi, što nam omogućuje automatizaciju naših ponavljajućih procesa i također stvaranje naredbi iz naredbi operativnog sustava. U ovom ćemo članku pregledati kako koristiti funkcije u bashu. Preporučujem da pročitate članak kako stvorite vlastite skripte pomoću basha.

U skripti koju predlažemo koristimo jezik Bash za traženje datoteke, znajući njezino ime. Za to ćemo koristiti naredba pronađi ali uz pomoć funkcija prethodno definiranih u spomenutoj skripti. Morate uzeti u obzir posebnost ili ograničenje Basha koje nije prisutno na svim jezicima: da bi se pozvala funkcija mora biti definirana ranije.

Definirajte funkcije

Postoje dva načina za definiranje funkcija: sa ili bez deklaracije funkcije:

function nombre_funcion () 
{
    # codigo
}

ili ovaj drugi, koji koristim kao što ćete kasnije vidjeti.

nombre_funcion ()
{
    # codigo
}

također Bash također nudi metodu za prosljeđivanje parametara i vraćanje rezultata. što ćemo vidjeti u budućim člancima.

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


Analiza skripte

Definicije

Za bash svaki proces koji je uspješno završen mora imati signal "0". Redci 12 i 13 definiraju kodove pogrešaka kojima se rukuje EXIT_OK za uspjeh y EXIT_BAD za izlaz pri neuspjehu.

U retcima 15 i 16 varijablama UZORAK i DIRECTORY dodjeljuju se prvi ($ 1) i drugi ($ 2) parametri koji se pojavljuju u naredbenom retku nakon imena skripte, kao što ćemo vidjeti kasnije kada je izvršimo.

u redak 18 mi stvaramo svoju prvu funkciju. Funkcija nazvana «autor» prikazuje autorstvo scenarija kada ga zovemo argumentom "-a" kao što možete vidjeti u if na retcima 50 ~ 54. Argument "-i" od 23. redaka omogućuje prikaz niza «sljedećeg retka» kodiranjem «\ n».

Poziv noparams (retci 28 ~ 37) zadužen je za upravljanje događajima koji se moraju dogoditi kada se skripta poziva bez ikakvih parametara. Pokazujemo, pravilno zatvorenu između novih kodova linija, poruku koja označava da se skripta mora izvršiti s dva parametra, a zatim je prikazana opcija (redak 31) za upotrebu čitati Zatražit će od vas da pritisnete "S" ili "s" u slučaju da želite pokazati pomoć. U retku 32 doslovno kažemo: 'ako je odgovor (koji nam dolazi u varijabli $ ODGOVOR) sadrži bilo koji od velikih ili malih slova ', a zatim (redak 33) prikazuje prazan redak (redak 34) i izvršava funkciju pomoći (retci 23 ~ 26).

Nodir funkcija (retci 39 ~ 42) izvršit će se kada otkrijemo da direktorij u kojem se pokušava tražiti ne postoji.

funkcionalnost

S ovim već imamo definirao sve potrebne funkcije da pokrenemo naš program, koji zapravo započinje u retku 44, provjeravajući je li prvi od parametara koje skripta prima "-h", ako je istina, pokrenite funkciju pomoći i izlazi koji ukazuju na normalan završetak.

Ako je OBRAZAC (prvi parametar kako je opisan u retku 15) "-a", autor se prikazuje slijedeći isti mehanizam objašnjen u prethodnom odlomku za opciju "-h".

Na liniji 56 kontrolira se da nismo dobili manje od dva parametraU ovom se slučaju izvršava funkcija noparams, zatim u if retka 60 doznajemo ako postoji direktorij na kojem želimo obaviti pretragu, ako postoji, prikazuje se prazan redak, naredba pronađi s adresom direktorija na kojem želimo izvršiti pretragu praćenu uzorkom (početak naziva datoteke koju tražimo) novi prazan redak i pomoću izlaz $? izlaz svoje skripte povjeravamo rezultatu koji je pronašao find. U slučaju da stanje postojanje direktorija je netočno (linija 67) upućujemo poziv funkciji nodir i izlazimo što ukazuje na nenormalan prekid.

Izvršenje i ispitivanje

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

En sljedeći članci o Bashu vidjet ćemo mehanizme za koristiti parametre u funkcijamaVidjet ćemo i kako artikulirati podatke o povratu iz istog.

Nadam se i nadam se da vam je ovaj post bio koristan.


Komentar, ostavi svoj

Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   josea dijo

    Pozdrav,
    vrlo zanimljivo i vrlo jasno.
    Samo napomena; na retku 68 ispred varijable EXIT_BAD nedostaje $.
    I dalje ću sigurno učiti s vašim člancima.