Funkcje zrozumienia i pisania w skontlerze - część VI
- 2226
- 256
- Roland Sokół
Funkcje odgrywają ważną rolę w każdym języku programowania. Podobnie jak wiele prawdziwych języków programowania, Bash ma funkcje używane z ograniczoną implementacją.
Zrozumienie funkcji skryptu Linux ShellJakie są funkcje?
W programowaniu funkcje są nazwane sekcjami programu, który wykonuje określone zadanie. W tym sensie funkcja jest rodzajem procedury lub rutyny. Gdy funkcja jest nazywana, program opuszcza bieżącą sekcję kodu i zaczyna wykonywać pierwszy wiersz w funkcji. Ilekroć jest powtarzający się kod lub gdy powtórzy się zadanie, rozważ użycie funkcji.
Na przykład rozważ przypadek, w którym musimy znaleźć czynnik liczby na kilku etapach konkretnego programu. Zamiast pisać cały kod (do obliczania czynnikowego) za każdym razem, możemy napisać tę część kodu, która oblicza czynnik raz w bloku i ponownie użyć tego samego.
Dlaczego piszemy funkcje?
- Pomaga nam ponownie użyć kodu.
- Popraw czytelność programu.
- Efektywne wykorzystanie zmiennych w programie.
- Pozwala nam przetestować część części według części.
- Wyświetla program jako kilka podgatunków.
Funkcje w skontlerze
Ogólna składnia do pisania funkcji w skrypcie Shell zawiera następujące sposoby.
Funkcja FUNC_NAME … Polecenia… lub Func_Name () … Polecenia… Otwarcie klamrowych klamrów może być również używane w drugim wierszu. FUNC_NAME () … polecenia…
Zawsze możesz swobodnie pisać prawidłowe polecenia w tych blokach funkcyjnych, ponieważ normalnie robimy w skontlerze. Teraz spróbujmy napisać jeden prosty skrypt z małą funkcją w niej.
#!/bin/bash call_echo () echo 'to jest w środku funkcja' op = 1 $ if [$# -Ne 1]; Następnie echo „Zastosowanie: 0 USD” Else, jeśli [1 USD = 0]; następnie echo „to jest funkcja zewnętrzna” Elif [1 $ = 1]; Następnie Call_echo Else Echo „Nieprawidłowy argument” Fi Fi Exit 0
Definicja funkcji musi poprzedzić pierwsze wywołanie. Nie ma nic takiego jak „deklarowanie funkcji” przed jej wywołaniem. I zawsze możemy gniazdować funkcje wewnątrz funkcji.
Notatka:- Pisanie pustych funkcji zawsze powoduje błędy składniowe.
Gdy ta sama funkcja jest zdefiniowana wielokrotnie, powołana jest wersja końcowa. Weźmy przykład.
#!/bin/bash func_same () echo 'pierwsza definicja' func_same () echo 'second definicja' func_same exit 0
Funkcje przyjmujące parametry i zwracające wartości
Weźmy głębiej, biorąc pod uwagę funkcje przyjmujące parametry i zwracając wartości. Aby zwrócić wartość z funkcji, używamy wbudowanej powłoki „return”. Składnia jest następująca.
FUNC_NAME () … polecenia… return $ ret_val
Podobnie możemy przekazywać argumenty do funkcji oddzielonych przestrzeniami, jak podano poniżej.
FUNC_NAME $ arg_1 $ arg_2 $ arg_3
Wewnątrz funkcji możemy uzyskać dostęp do argumentów w kolejności jako 1 USD, 2 USD, 3 USD i tak dalej. Spójrz na poniższy przykładowy skrypt, aby znaleźć maksimum dwóch liczb całkowitych za pomocą funkcji, aby dodać więcej jasności.
#!/bin/bash USG_ERR = 7 max_two () if ["$ 1" -eq "$ 2"]; następnie echo „równe” wyjście 0 elif [„1 $” -GT „$ 2”]; Następnie echo 1 $ El echo 2 $ Fi err_str () echo "Użycie: 0 $" Wyjdź $ usg_err num_1 = 1 $ num_2 = 2 x if [$# -NE 2]; następnie err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; wtedy ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; Następnie max_two $ num_1 $ num_2 else err_str fi else err_str fi exit 0
Powyższe wygląda jak nieco złożone, ale jest proste, jeśli przeczytamy linie. Pierwszy zagnieżdżony if-else, jeśli linie do celów walidacji i.mi., Aby sprawdzić numer i rodzaj argumentów za pomocą wyrażeń regularnych. Następnie wywołujemy funkcję dwoma argumentami wiersza poleceń i wyświetla się w samym wyniku. Dzieje się tak, ponieważ nie możemy zwrócić dużych liczb całkowitych z funkcji. Innym sposobem obejścia tego problemu jest użycie globalnych zmiennych do przechowywania funkcji wewnętrznej wyniku. Poniższy skrypt wyjaśnia tę metodę.
#!/bin/bash USG_ERR = 7 ret_val = max_two () if ["$ 1" -eq "$ 2"]; następnie echo „równe” wyjście 0 elif [„1 $” -GT „$ 2”]; następnie ret_val = 1 $ else ret_val = 2 $ fi err_str () echo "Użycie: 0 $" Wyjdź $ usg_err num_1 = 1 $ num_2 = 2, jeśli [$# -NE 2]; następnie err_str elif ['expr $ num_1:' [0-9]*"-eq $ #num_1]; wtedy ['expr $ num_2:' [0-9]*"-eq $ #num_2] ; Następnie max_two $ num_1 $ num_2 echo $ ret_val else err_str fi else err_str fi exit 0
Wypróbuj teraz ekscytujące problemy, które zostały wyjaśnione w poprzedniej serii scenariuszy Shell, używając funkcji w następujący sposób.
- Zrozum Podstawowe wskazówki dotyczące skryptów scenariuszy Linux - Część I
- 5 Skrypty powłoki dla nowicjusz
- Żeglując po świecie scenariuszy Linux Bash - część III
- Matematyczny aspekt programowania Linux Shell - Część IV
- Obliczanie wyrażeń matematycznych w języku skontaktowym skorupy - Część V
Wrócę z więcej wglądu w funkcje funkcjonalne, takie jak używanie zmiennych lokalnych, rekurencja itp. W następnej części. Bądź na bieżąco z komentarzami.
- « Zenity - tworzy okno dialogowe graficzne (GTK+) w skryptach linii poleceń i skorupach
- Multitail - monitoruj wiele plików jednocześnie w jednym terminalu Linux »