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.
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.