Jak utworzyć skrypt powłoki w systemie Linux

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