Kako se koriste funkcije u Bashu

Kako se koriste funkcije u Bashu pomoću ovog računarskog jezika koji je zasnovan na Unix-ovoj ljusci, u skladu s POSIX-om. Kao jezik, njegova se funkcija sastoji od interpretacije Linux naredbi, što nam omogućava automatizaciju naših ponavljajućih procesa i također stvaranje naredbi od naredbi operativnog sistema. U ovom članku ćemo pregledati kako koristiti funkcije u bash-u. Preporučujem vam da pročitate članak kako kreirajte vlastite skripte koristeći bash.

U skripti koju predlažemo koristimo jezik Bash za traženje datoteke, znajući njeno ime. Za ovo ćemo koristiti find naredba 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đe 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 grešaka kojima se rukuje EXIT_OK za uspjeh y EXIT_BAD za izlaz pri neuspjehu.

U redovima 15 i 16, varijablama PATTERN 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 red 18 mi kreiramo svoju prvu funkciju. Funkcija nazvana «autor» prikazuje autorstvo scenarija kada ga zovemo s argumentom "-a" kao što možete vidjeti u if na linijama 50 ~ 54. Argument "-i" iz reda 23 omogućava prikaz niza «sljedećeg retka» kodiranjem «\ n».

Poziv noparams (linije 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 ukazuje da se skripta mora izvršiti s dva parametra, a zatim je prikazana opcija (linija 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 (red 33) prikazuje prazan red (red 34) i izvršava funkciju pomoći (redovi 23 ~ 26).

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

Funcionalidad

Sa ovim već imamo definirao sve potrebne funkcije da izvršimo naš program, koji zapravo započinje na liniji 44, provjeravajući je li prvi od parametara koje skripta prima "-h", ako je istina, izvršite funkciju pomoć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, a zatim u if iz retka 60 saznajemo ako postoji direktorij u kojem želimo izvršiti pretragu, ako postoji, prikazuje se prazan red, find naredba s adresom direktorija na kojem želimo izvršiti pretragu praćenu uzorkom (početak imena datoteke koju tražimo) novi prazan red i pomoću izlaz $? izlaz svoje skripte povjeravamo rezultatu koji je pronašao find. U slučaju da je stanje postojanje direktorija je netačno (linija 67) upućujemo poziv funkciji nodir i izlazimo što ukazuje na abnormalni završetak.

Izvršenje i testiranje

$ 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 funkcijamaVidećemo i kako artikulirati povratne podatke od istog.

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


Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

      josea rekao je

    zdravo,
    vrlo zanimljivo i vrlo jasno.
    Samo napomena; u retku 68 ispred varijable EXIT_BAD nedostaje $.
    Nastavit ću učiti sa sigurnošću uz vaše članke.