Jak używać funkcji w Bash przy użyciu tego opartego na powłoce systemu Unix i zgodnego z POSIX języka komputerowego. Jako język, jego funkcja polega na interpretacji poleceń systemu Linux, co pozwala nam zautomatyzować nasze powtarzalne procesy, a także tworzyć polecenia z poleceń systemu operacyjnego. W tym artykule dokonamy przeglądu jak używać funkcji w bash. Polecam przeczytać artykuł, jak to zrobić stwórz własne skrypty używając basha.
W proponowanym przez nas skrypcie do wyszukiwania pliku używamy języka Bash, znając jego nazwę. W tym celu użyjemy znajdź polecenie ale z pomocą funkcji wcześniej zdefiniowanych w tym skrypcie. Musisz wziąć pod uwagę specyfikę lub ograniczenia Bash, które nie są obecne we wszystkich językach: aby wywołać funkcję, należy ją zdefiniować wcześniej.
Zdefiniuj funkcje
Istnieją dwa sposoby definiowania funkcji: z deklaracją funkcji lub bez niej:
function nombre_funcion () { # codigo }
lub ten inny, którego używam, jak zobaczysz później.
nombre_funcion () { # codigo }
Również Bash zapewnia również metodę przekazywania parametrów i zwracania wyników. które zobaczymy w przyszłych artykułach.
#!/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 skryptów
Definicje
Dla basha każdy proces zakończony pomyślnie musi mieć kod „0” jako sygnał. Wiersze 12 i 13 definiują obsługiwane kody błędów EXIT_OK na sukces y EXIT_BAD do wyjścia w przypadku niepowodzenia.
W liniach 15. i 16. zmiennym PATTERN i DIRECTORY są przypisane pierwszy ($ 1) i drugi ($ 2) parametr, który pojawia się w wierszu poleceń po nazwie skryptu, co zobaczymy później, gdy go wykonamy.
W wiersz 18 tworzymy naszą pierwszą funkcję. Funkcja o nazwie „autor” wyświetla autorstwo scenariusza kiedy wywołujemy to z argumentem „-a”, jak widać w if w liniach 50 ~ 54. Argument "-i" z linii 23 umożliwia wyświetlenie sekwencji «następnej linii» poprzez kodowanie «\ n».
Wywołanie noparams (linie 28 ~ 37) jest odpowiedzialne za zarządzanie zdarzeniami, które muszą wystąpić, gdy skrypt jest wywoływany bez żadnych parametrów. Pokazujemy, odpowiednio ujęty między nowymi kodami linii, komunikat wskazujący, że skrypt musi zostać wykonany z dwoma parametrami, a następnie pokazana jest opcja (linia 31) do użycia czytać Monituje o naciśnięcie „S” lub „s” w przypadku, gdy chcesz pokazać pomoc. W linii 32. dosłownie mówimy: „jeśli odpowiedź (przychodzi do nas w zmiennej $ ODPOWIEDŹ) zawiera dowolne wielkie lub małe litery ', a następnie (linia 33) pokazuje pustą linię (linia 34) i wykonuje funkcję pomocy (linie 23 ~ 26).
Funkcja nodir (linie 39–42) zostanie wykonana, gdy wykryjemy, że katalog, w którym próbowano przeszukiwać, nie istnieje.
Funkcjonalność
Dzięki temu już mamy zdefiniowano wszystkie niezbędne funkcje aby wykonać nasz program, który faktycznie zaczyna się w linii 44, sprawdzając, czy pierwszy z parametrów, które otrzymuje skrypt to "-h", jeśli jest prawdziwy, wykonaj funkcję pomocy i wyjścia wskazujące na normalne zakończenie.
Jeśli WZORZEC (pierwszy parametr opisany w linii 15) ma wartość „-a”, autor jest wyświetlany zgodnie z tym samym mechanizmem, co w poprzednim akapicie dla opcji „-h”.
Na linii 56 jest kontrolowane, że otrzymaliśmy nie mniej niż dwa parametryW tym przypadku wykonywana jest funkcja noparams, a następnie dowiadujemy się w instrukcji if z linii 60 jeśli katalog, w którym chcemy przeprowadzić wyszukiwanie, istnieje, jeśli istnieje, wyświetlany jest pusty wiersz, plik znajdź polecenie z adresem katalogu, w którym chcemy przeprowadzić wyszukiwanie, po którym następuje wzorzec (początek nazwy szukanego pliku) nową pustą linię i używając wyjść $? powierzamy wynik naszego skryptu wynikowi wygenerowanemu przez find. W przypadku, gdy stan istnienie katalogu jest fałszywe (linia 67) wywołujemy funkcję nodir i wychodzimy, wskazując na nieprawidłowe zakończenie.
Wykonanie i testowanie
$ encontrar $ encontrar -a $ encontrar -h $ encontrar index aljflaskjf #directorio no existe $ encontrar index public_html $
En następujące artykuły o Bash zobaczymy mechanizmy używać parametrów w funkcjachZobaczymy również, jak to zrobić artykułować dane zwrotne z nich.
Mam nadzieję i mam nadzieję, że ten post był dla Ciebie przydatny.
Cześć,
bardzo interesujące i bardzo jasne.
Tylko uwaga; Brak znaku $ w linii 68 przed zmienną EXIT_BAD.
Będę dalej uczyć się na pewno z twoich artykułów.