Jak utworzyć skrypt powłoki w systemie Linux
Shell to interfejs systemu operacyjnego. Przyjmuje polecenia od użytkowników i interpretuje je dla systemu operacyjnego. Jeśli chcesz uruchomić kilka poleceń jednocześnie, możesz to zrobić, tworząc skrypt powłoki. Skrypty powłoki są bardzo przydatne, jeśli chcesz rutynowo wykonać zadanie, na przykład wykonanie kopii zapasowej. Możesz wyświetlić listę tych poleceń i wykonać je wszystkie za pomocą jednego skryptu. Zobaczmy, jak utworzyć skrypt powłoki i uruchomić go w systemie Linux.
Tworzenie skryptu powłoki
Zaloguj się na komputerze z systemem Linux i otwórz terminal, przejdź do folderu, w którym chcesz przechowywać skrypt powłoki. Skrypty powłoki kończą się rozszerzeniem .sh. Stwórzmy nasz pierwszy skrypt powłoki. Wpisz
touch script.sh
Teraz ten plik skryptu nie jest domyślnie wykonywalny, musimy nadać temu plikowi uprawnienia wykonywalne. Wpisz
chmod +x script.sh
Teraz dodamy kilka poleceń do tego skryptu powłoki. Otwórz ten skrypt powłoki za pomocą dowolnego wybranego edytora tekstu (z wiersza poleceń lub z graficznym interfejsem użytkownika) i dodaj kilka poleceń. Użyjemy nano. Wpisz
nano script.sh
Dodaj następujące polecenia, aby przetestować ten skrypt powłoki
echo This is my first shell script touch testfile ls echo End of my shell script
Zapisz zmiany i uruchom skrypt powłoki, wpisując
./script.sh
Zrzut ekranu przedstawiający powyższe kroki
Jak widać, wykonał wszystkie określone polecenia.
Komentarze w skrypcie powłoki
Każda linia rozpoczynająca się od # w skrypcie powłoki jest traktowana jako komentarz i jest ignorowana przez powłokę podczas wykonywania, z wyjątkiem linii shebang, którą zobaczymy w dalszej części tego artykułu. Zobaczmy przykład. Tworzony jest skrypt powłoki z następującą treścią.
# This is a comment echo Testing comments in shell script
Komentarze w skrypcie powłoki
Jak widać, komentarz zostaje zignorowany.
Zmienne w skrypcie powłoki
Tak, skrypty powłoki obsługują użycie zmiennych i nie musimy definiować typu zmiennej podczas jej deklaracji. Istnieją dwa typy zmiennych:
- Zmienne zdefiniowane przez system
- Zmienne zdefiniowane przez użytkownika.
Zmienne definiowane przez system, zwane także zmiennymi środowiskowymi, są zazwyczaj pisane wielką literą. Możesz wyświetlić wszystkie bieżące zmienne środowiskowe za pomocą polecenia printenv. Zmienne zdefiniowane przez użytkownika są ustawiane przez użytkownika i istnieją tylko podczas wykonywania skryptu. Możesz zdefiniować zmienną, po prostu wpisując jej nazwę i przypisując wartość za pomocą znaku =, a dostęp do zmiennej uzyskasz, dodając $ przed nazwą zmiennej. Zmienne przedstawiono w poniższym przykładowym skrypcie.
# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name='Geeksforgeeks' echo $variable_name
Zmienne w skrypcie powłoki
Definiowanie interpretera skryptu powłoki
W Linuksie dostępnych jest wiele powłok, takich jak The Bourne Shell (sh), The Korn Shell (ksh) i GNU Bourne-Again Shell (bash). Skrypty napisane dla powłoki sh nazywane są skryptami powłoki i mogą być interpretowane zarówno przez powłokę ksh, jak i bash. ksh i Bash są ulepszonymi wersjami oryginalnej powłoki sh i mają więcej funkcji niż sh. Bash jest ogólnie domyślną powłoką w większości dystrybucji Linuksa, a skrypty napisane specjalnie dla powłoki bash nazywane są skryptami bash.
Możesz określić, jakiej powłoki będzie używał skrypt, nawet jeśli skrypt będzie wykonywany z innego terminala powłoki. Aby to zrobić, dodaj #! na górze pliku skryptu, po którym następuje bezwzględna ścieżka wybranej powłoki. Aby określić bash jako interpreter, dodaj następujący wiersz na górze skryptu powłoki.
#!/bin/bash
Linia ta nazywana jest linią shebang.
Notatka: To zadziała tylko wtedy, gdy w systemie jest zainstalowany bash.
Operatory porównania
Możesz porównać dwie zmienne w skrypcie powłoki. Dokonujemy tych porównań, aby podejmować decyzje. Zobaczymy, jak to zrobić w dalszej części tego artykułu, ale wcześniej przedstawiamy listę niektórych operatorów porównania.
Porównanie liczb całkowitych
| Operator | Opis |
|---|---|
| -równ | jest równe |
| - Jest | nie jest równe |
| -gt | jest większy niż |
| -ge | jest większa niż lub równa |
| -lt | jest mniej niż |
| -the | jest mniejsza lub równa |
Porównanie ciągów
| Operator | Opis |
|---|---|
| == | jest równe |
| != | nie jest równe |
| < | jest mniejsza niż w kolejności alfabetycznej ASCII |
| > | jest większa niż w kolejności alfabetycznej ASCII |
Dodajemy przed, ponieważ należy je zmienić podczas wpisywania w konstrukcji [ ]. Zobaczmy teraz, gdzie są one używane.
Instrukcje warunkowe
Instrukcje warunkowe służą do wykonania bloku kodu tylko wtedy, gdy spełnione są określone warunki. Skrypty powłoki obsługują instrukcje warunkowe. Do sprawdzania warunków używamy operatorów porównania. Zobaczmy kilka instrukcji warunkowych.
Jeśli stwierdzenie
Sprawdza warunek i jeśli jest warunkowy prawdziwy, wykonuje polecenia.
Składnia
if [ condition ] then #statements fi
Zobaczmy przykład.
#!/bin/sh x=10 y=11 if [ $x -ne $y ] then echo 'Not equal' fi
.if instrukcja
Instrukcja if-else
W instrukcji if-else możesz określić zestaw poleceń, które zostaną uruchomione, jeśli warunek nie zostanie spełniony.
Składnia
if [ condition ] then #set of statements if the condition is true else #set of statements if the condition is false fi
Zobaczmy przykład
#!/Syntaxbin/sh x=10 y=10 if [ $x -ne $y ] then echo 'Not equal' else echo 'They are equal' fi
Instrukcja .if-else
Istnieją inne instrukcje warunkowe, możesz o nich przeczytać Tutaj .
Notatka: Wpisz spację po [ i przed ] podczas określania sprawdzanego warunku, w przeciwnym razie pojawi się błąd.
Pętle
Używając pętli, możesz wielokrotnie wykonywać zestaw poleceń, aż zostanie spełniony określony warunek. Zobaczmy niektóre pętle.
Podczas pętli
Rozpoczyna wykonywanie określonych poleceń, jeśli warunek jest prawdziwy, i powtarza je, aż warunek będzie fałszywy.
Składnia
while [ condition ] do #set of statements done
Zobaczmy przykład.
#!/bin/sh x=2 while [ $x -lt 6 ] do echo $x x=`expr $x + 1` done
Podczas pętli
Załączamy instrukcję wyrażenia wewnątrz ` ` podczas przypisywania jej do zmiennej. O poleceniu expr możesz przeczytać tutaj.
Dla pętli
W pętli for zmienna wykonuje iterację po liście wartości i kończy się, gdy nie ma już więcej wartości do iteracji.
Składnia
for var in val1 val2 val3 do #statements done
Zobaczmy przykład.
#!/bin/sh for var in 2 4 5 8 do echo $var done
dla pętli
Możesz przeczytać szczegółowo o pętlach Tutaj .
Argumenty pozycyjne
Argumenty pozycyjne to argumenty lub wartości, które przekazujemy do skryptu powłoki podczas wykonywania skryptu. Dostęp do nich zapewniają zmienne $0, $1, $2… $9. Poza tym odnoszą się do nich ${10}, ${11} i tak dalej. $# przechowuje liczbę przekazanych argumentów, a $0 przechowuje nazwę skryptu. Zobaczmy przykład, aby to wszystko zrozumieć.
#!/bin/sh echo 'No of arguments is $#' echo 'Name of the script is $0' echo 'First argument is $1' echo 'Second argument is $2'
Aby przekazać argumenty, po prostu wpisz je w terminalu po nazwie skryptu, jak pokazano poniżej.
Argumenty pozycyjne
Przechowywanie wyników poleceń
Możesz przechowywać dane wyjściowe poleceń wewnątrz zmiennej w skrypcie powłoki. Można to zrobić na dwa sposoby.
Składnia
#Syntax 1 var=$(a valid linux command) #Syntax 2 var2=`a valid linux command`
Zobaczmy przykład.
#!/bin/sh b=$(pwd) c=`pwd` echo $b echo $c d=$(ls /bin | grep bash) echo $d
Przechowywanie wyników poleceń
Kody zakończenia poleceń powłoki
Za każdym razem, gdy polecenie kończy się i zwraca kontrolę do procesu nadrzędnego, zwraca kody zakończenia z zakresu od 0 do 255. Kod zakończenia 0 oznacza, że polecenie się powiodło, a każdy inny kod zakończenia oznacza, że polecenie nie powiodło się. Możesz wyświetlić kod zakończenia po uruchomieniu dowolnego polecenia, uzyskując dostęp do $? zmienny. Zobacz przykład poniżej.
kod wyjścia polecenia powłoki
Możesz ręcznie ustawić kod zakończenia skryptu powłoki. Można tego używać z instrukcjami warunkowymi, aby poinformować, czy cel skryptu został osiągnięty, czy nie.
Przykład
#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi
kod wyjścia polecenia powłoki