Bash w systemie Linux – Odkryj potęgę automatyzacji w systemie Linux za pomocą języka skryptowego Bash. W naszym artykule dowiesz się, jak efektywnie pisać skrypty w Bashu, aby zautomatyzować codzienne zadania administracyjne. Poznaj składnię, strukturę i najlepsze praktyki tworzenia skryptów Bash, które oszczędzą Twój czas i wysiłek. Niezależnie od Twojego poziomu zaawansowania, ten artykuł dostarczy Ci przykłady i wskazówki, które pozwolą Ci w pełni wykorzystać potencjał tego wszechstronnego języka skryptowego w środowisku Linux.
Kiedy mówimy o Linuksie i Terminalu, nie możemy zapominać o skryptach Bash. Skrypty Bash będą bardzo pomocne, aby ułatwić prace z systemem, lub pisać proste programy, możemy także zautomatyzować pewne operacje i inne zadania. W tym artykule porozmawiamy o „ Skryptach Bash ” i o tym, jak pisać dokładne skrypty w systemie Linux.
Skrypt shellowy to nic innego jak bardziej rozbudowana wersja listy pewnych poleceń, które
mają zostać wykonane przez system. Zgodnie z ogólnie przyjętą konwencją, każdy
powstający skrypt (działający w BASH-u) powinien się zaczynać od następującej linijki:
#!/bin/bash
Linia ta jest o tyle istotnie, że przy jej pomocy definiujemy powłokę, która będzie
odpowiedzialna za wykonanie ciągu instrukcji umieszczonych wewnątrz skryptu.
Pomimo tego, że pominiecie tej linii spowoduje, że skrypt będzie działał, zaleca się jej
stosowanie, ponieważ składnia rozmaitych powłok może się nieznacznie różnić, a w
rezultacie uruchomiony skrypt może wyświetlać różne wyniki (będzie raz działać, a raz nie)
w zależności od tego, pod jaką powłoką zostanie uruchomiony.
GNU Bourne-Again Shell ( Bash ) to potężne narzędzie i silnik skryptowy. Wiele zadań możemy zautomatyzować z poziomu wiersza poleceń. W tym przewodniku uczymy się skryptów Bash i znamy kilka praktycznych przypadków użycia. Zakładamy tutaj, że wiemy o plikach Linuksa
Bash w systemie Linux- Wprowadzenie do skryptów Bash
Skrypt Bash to zwykły plik tekstowy zawierający serię poleceń, które są wykonywane tak, jakby zostały wpisane w oknie terminala. Ogólnie rzecz biorąc, skrypty Bash mają opcjonalne rozszerzenie .sh w celu identyfikacji (ale można je uruchomić bez nazwy rozszerzenia), zaczynają się od #!/bin/bash i muszą mieć ustawione uprawnienia do wykonywania, zanim będzie można wykonać skrypt. Napiszmy prosty skrypt Bash „Hello World”. Otwieramy dowolny edytora tekstu, nazwijmy go witaj-jacek.sh i napiszmy w nim następującą treść: ( edytuj swoje imię )
#!/bin/bash
# Witaj Jacek w skrypcie Bash.
echo „Witaj, Jacek!”
Następnie zapisz i zamknij. W powyższym skrypcie użyliśmy kilku komponentów, które musimy wyjaśnić:
- Linia 1 : #! jest znany jako shebang i jest ignorowany przez interpreter Bash. Druga część, /bin/bash , to bezwzględna ścieżka do interpretera, który służy do uruchomienia skryptu. W tym celu możemy to zidentyfikować, jest to „skrypt Bash”. Istnieją różne typy skryptów powłoki, takie jak „zsh” i „skrypt powłoki C” itp.
- Linia 2 : # służy do dodania komentarza. Testy hashowane (#) będą ignorowane przez tłumacza. Te komentarze pomogą nam w sporządzeniu specjalnych notatek do skryptów.
- Linia 3 : echo „Witaj Jacek!” używa narzędzia poleceń echo Linux do wypisania na terminalu danego ciągu znaków, czyli w tym przypadku „Witaj Jacek!” .
Teraz musimy sprawić, aby ten skrypt był wykonywalny, uruchamiając następujące polecenie:
chmod +x witaj-jacek.sh
Na poniższym zrzucie ekranu możemy zobaczyć wynik powyższego polecenia:

Teraz możemy uruchomić skrypt za pomocą następującego polecenia:
bash witaj-jacek.sh
Widzimy, że nasz skrypt wyświetla wynik polecenia „Witaj Jacek!” na naszym terminalu, jak widać na poniższym zrzucie ekranu:

Komenda chmod z flagą +x służy do uczynienia skryptu bash wykonywalnym, a bash wraz z komendą nazwa_skryptu.sh możemy go uruchomić. Możemy ./script-name.sh uruchomić skrypt. To był nasz pierwszy skrypt w języku Bash. Przyjrzyjmy się Bashowi nieco bardziej szczegółowo.
Bash w systemie Linux – Zmienne
Zmienne służą do tymczasowego przechowywania danych. Możemy zadeklarować zmienną, aby przypisać do niej wartość, lub odczytać zmienną, która „rozwinie” lub „rozwiąże” ją do wartości przechowującej.
Wartości zmiennych możemy deklarować na różne sposoby. Najłatwiejszą metodą jest bezpośrednie ustawienie wartości za pomocą prostej deklaracji nazwa=wartość . Pamiętajmy, że pomiędzy i po znaku „=” nie ma spacji.
Na naszym terminalu możemy uruchomić następujące polecenie:
name=Ubuntu
Następnie ponownie uruchamiamy kolejne polecenie:
surname=Linux
Deklarowanie zmiennej nie ma sensu, chyba że możemy jej użyć/odwoływać się do niej. W tym celu poprzedzamy zmienną znakiem $ . Ilekroć Bash zobaczy tę składnię ( $ ) w poleceniu, przed wykonaniem polecenia zastępuje nazwę zmiennej jej wartością. Na przykład możemy powtórzyć obie te zmienne, używając następującego polecenia:
echo $name $surname
Na poniższym zrzucie ekranu możemy wyświetlić dane wyjściowe wartości zmiennych:

Nazwy zmiennych mogą być wielkie, małe lub stanowić kombinację obu. W Bash rozróżniana jest wielkość liter, dlatego musimy zachować spójność podczas deklarowania i wydatkowania zmiennych. Dobrą praktyką jest używanie opisowych nazw zmiennych, które znacznie ułatwiają innym zrozumienie i utrzymanie naszego skryptu.
Bash interpretuje pewne znaki w określony sposób. Na przykład poniższa deklaracja demonstruje niewłaściwą deklarację zmiennej wielowartościowej:
hello=Witaj Jacek
Na poniższym zrzucie ekranu możemy zobaczyć wynik.

To niekoniecznie było to, czego się spodziewaliśmy. Aby naprawić tego typu błąd, możemy użyć pojedynczego cudzysłowu (’) lub podwójnego cudzysłowu („), aby dołączyć nasz tekst. Musimy tutaj wiedzieć, że Bash inaczej traktuje pojedyncze cudzysłowy i podwójne cudzysłowy. Kiedy Bash napotka pojedyncze cudzysłowy, Bash interpretuje każdy znak zamknięty dosłownie. Gdy są ujęte w podwójny cudzysłów, wszystkie znaki są postrzegane dosłownie z oczekiwaniem „ $ ” i „ \ ”, co oznacza, że zmienne zostaną wykorzystane w początkowym przebiegu podstawienia załączonego tekstu.
W przypadku powyższego scenariusza poniższe wyjaśnienia pomogą wyjaśnić:
hello='Witaj Jacek'
Teraz możemy wydrukować tę zmienną za pomocą echo , jak pokazano na poniższym zrzucie ekranu:

W powyższym przykładzie użyliśmy pojedynczego cudzysłowu (’), aby użyć zmiennej. Ale kiedy używamy zmiennej hello z czymś innym, musimy użyć podwójnego cudzysłowu („), dla lepszego zrozumienia możemy zobaczyć następujące informacje:
hello2="Hi, $hello"
Teraz możemy zobaczyć wydruk ( echo ) nowej zmiennej $hello2 na poniższym zrzucie ekranu:

Możemy także ustawić wartość zmiennej na wynik polecenia lub skryptu. Nazywa się to również podstawieniem poleceń, które pozwala nam pobrać wynik polecenia (który normalnie zostałby wydrukowany na ekranie) i zapisać go jako wartość zmiennej.
W tym celu należy umieścić nazwę zmiennej w nawiasie „ () ”, poprzedzoną znakiem „ $ ”:
user=$(whoami)
echo $user
Tutaj przypisaliśmy wynik polecenia whoami zmiennej użytkownika . Następnie wyświetliliśmy jego wartość za pomocą echo . Na poniższym zrzucie ekranu możemy zobaczyć wynik powyższego polecenia:

Alternatywna składnia podstawienia poleceń za pomocą znaku backtick ( ` ), jak widzimy w następujących poleceniach:
user2=`whoami`
echo $user2
Ta metoda backtick jest starsza i zazwyczaj odradzana, ponieważ istnieją różnice w zachowaniu obu metod podstawienia poleceń . Należy również zauważyć, że podstawienie poleceń odbywa się w podpowłoce, a zmiany zmiennych w podpowłoce nie powodują zmiany zmiennych z procesu głównego.
Bash w systemie Linux – Argumenty
Nie wszystkie skrypty Bash wymagają argumentów . Jednak niezwykle ważne jest zrozumienie, jak są one interpretowane przez bash i jak z nich korzystać. Wykonaliśmy już polecenia Linuksa z argumentami. Na przykład, gdy uruchomimy polecenie ls -l /var/log , zarówno -l, jak i /var/log są argumentami polecenia ls .
Skrypty Bash nie różnią się od siebie, możemy dostarczać argumenty wiersza poleceń i używać ich w naszych skryptach. Uruchom dowolny edytor tekstu i stwórz skrypt. Dla przykładu możemy zobaczyć następujący zrzut ekranu:


chmod +x arg.sh

Na powyższym zrzucie ekranu stworzyliśmy prosty skrypt Bash, ustawiliśmy dla niego uprawnienia do wykonywania, a następnie uruchomiliśmy go z dwoma argumentami. Zmienne $1 i $2 reprezentują pierwszy i drugi argument przekazany do skryptu. Przyjrzyjmy się kilku specjalnym zmiennym Bash:
Nazwa zmiennej | Opis |
---|---|
0 dolarów | Nazwa skryptu Bash |
1 USD – 9 USD | Pierwsze 9 argumentów skryptu Bash |
$# | Liczba argumentów przekazanych do skryptu Bash |
$@ | Wszystkie argumenty przekazywane do skryptu Bash |
$? | Status wyjścia ostatnio uruchomionego procesu |
$$ | Identyfikator procesu bieżącego skryptu |
$UŻYTKOWNIK | Nazwa użytkownika uruchamiającego skrypt |
$HOSTNME | Nazwa hosta maszyny |
$Losowe | Losowa liczba |
$LINENIE | Bieżący numer linii w skrypcie |
Niektóre z tych specjalnych zmiennych mogą być przydatne podczas debugowania skryptu. Na przykład możemy uzyskać status zakończenia polecenia, aby określić, czy zostało ono pomyślnie wykonane, czy nie.
Bash w systemie Linux – Odczytywanie danych wejściowych użytkownika
Argumenty wiersza poleceń są formą danych wprowadzanych przez użytkownika, ale za pomocą polecenia read możemy także przechwytywać interaktywne dane wprowadzane przez użytkownika podczas działania skryptu . Użyjemy read, aby przechwycić dane wejściowe użytkownika i przypisać je do zmiennej, tak jak to zrobiliśmy na poniższym zrzucie ekranu:

Możemy zmienić zachowanie polecenia odczytu za pomocą różnych opcji wiersza poleceń. Dwie z najczęściej używanych flag to -p , która pozwala nam określić znak zachęty, oraz -s , dzięki któremu dane wprowadzane przez użytkownika są ciche/niewidoczne (może być pomocne w przypadku poświadczeń). Przykład możemy zobaczyć na poniższym zrzucie ekranu:

#!/bin/bash
echo "Witaj, Proszę podaj swoje imię: "
read name
echo "Witaj $name, jak się masz: ? "

If, Else, Elif – Jeśli, w przeciwnym razie
If, Else, Elif są uważane za najczęstsze instrukcje warunkowe, które pozwalają nam pokazać różne działania w oparciu o różne warunki.
Instrukcja if jest dość prosta. Sprawdza to, czy warunek jest prawdziwy, ale wymaga bardzo specyficznej składni. Musimy zwracać uwagę na tę składnię, zwłaszcza na użycie wymaganych spacji.
Na poniższym zrzucie ekranu, jeśli „ jakieś stwierdzenie ” jest prawdziwe, skrypt „ wykona jakąś akcję ”, a tą akcją może być dowolne polecenie od then do fi . Spójrzmy na rzeczywisty przykład.
Otwieramy nowy dokument if.sh w edytorze tekstu w terminalu, zapisujemy, po zapisaniu nadajemy uprawnienia do uruchamiania
#!/bin/bash
# test IF
read -p "Jaki jest twój wiek? :" wiek
if [ $wiek -lt 12 ]
then
echo "możesz potrzebować zgody rodziców, aby uzyskać dostęp do naszej witryny!"
fi


W powyższym przykładzie użyliśmy instrukcji if , aby sprawdzić wiek wprowadzony przez użytkownika. Jeśli wiek użytkownika był mniejszy niż ( -lt ) 12 lat, skrypt wyświetli komunikat ostrzegawczy.
Tutaj nawiasy kwadratowe ([&]) w powyższej instrukcji if pierwotnie odnoszą się do polecenia testowego. Oznacza to po prostu, że możemy używać wszystkich operatorów dozwolonych w poleceniu test. Niektóre z powszechnie używanych operatorów obejmują:
- -n VAR – Prawda, jeśli długość VAR jest większa od zera.
- -z VAR – Prawda, jeśli VAR jest pusty.
- ŁAŃCUCH1 = ŁAŃCUCH2 – Prawda, jeśli ŁAŃCUCH1 i ŁAŃCUCH2 są równe.
- ŁAŃCUCH1 != ŁAŃCUCH2 – Prawda, jeśli ŁAŃCUCH1 i ŁAŃCUCH2 nie są równe.
- INTEGER1 -eq INTEGER2 – Prawda, jeśli INTEGER1 i INTEGER2 są równe.
- INTEGER1 -gt INTEGER2 – Prawda, jeśli INTEGER1 jest większa niż INTEGER2.
- INTEGER1 -lt INTEGER2 – Prawda, jeśli INTEGER1 jest mniejsza niż INTEGER2.
- INTEGER1 -ge INTEGER2 – Prawda, jeśli INTEGER1 jest równa lub większa niż INTEGER2.
- INTEGER1 -le INTEGER2 – Prawda, jeśli INTEGER1 jest równa lub mniejsza niż INTEGER2.
- -h PLIK – Prawda, jeśli PLIK istnieje i jest dowiązaniem symbolicznym.
- -r PLIK – Prawda, jeśli PLIK istnieje i można go odczytać.
- -w PLIK – Prawda, jeśli PLIK istnieje i można go zapisać.
- -x PLIK – Prawda, jeśli PLIK istnieje i jest wykonywalny.
- -d PLIK – Prawda, jeśli PLIK istnieje i jest katalogiem.
- -e PLIK – Prawda, jeśli PLIK istnieje i jest plikiem, niezależnie od typu (węzeł, katalog, gniazdo itp.).
- -f PLIK – Prawda, jeśli PLIK istnieje i jest zwykłym plikiem (nie katalogiem ani urządzeniem).
Zastosowaliśmy te rzeczy do powyższego przykładu instrukcji if i usunęliśmy nawiasy kwadratowe za pomocą ciągu testowego. Uważamy jednak, że nawias kwadratowy czyni kod bardziej czytelnym.
Możemy również wykonać określony zestaw działań, jeśli stwierdzenie jest prawdziwe, a inne stwierdzenie jest fałszywe. W tym celu możemy skorzystać z instrukcji else, która ma inną składnię:
Teraz dla przykładu rozszerzamy nasz poprzedni przykład wieku, włączając naszą instrukcję else , jak pokazano na poniższym zrzucie ekranu:
#!/bin/bash
# test IF
read -p "Jaki jest twój wiek? :" wiek
if [ $wiek -lt 12 ]
then
echo "możesz potrzebować zgody rodziców, aby uzyskać dostęp do naszej witryny!"
else
echo "Witaj w Domu"
fi


Łatwo zauważyć, że instrukcja else wykonana, gdy wprowadzony wiek wynosił nie mniej niż 12 lat.
Za pomocą instrukcji elif możemy dodać więcej argumentów do instrukcji . Przykład:
Rozszerzmy nasz przykład dotyczący wieku o instrukcję elif na poniższym zrzucie ekranu:
nano elif.sh
#!/bin/bash
# test IF
read -p "Jaki jest twój wiek? :" wiek
if [ $wiek -lt 12 ]
then
echo "możesz potrzebować zgody rodziców, aby uzyskać dostęp do naszej witryny!"
elif [ $wiek -gt 60 ]
then
echo "Witam starszego pana"
else
echo "Witaj w Domu"
fi


Na powyższym przykładzie widać, że kod jest nieco skomplikowany w porównaniu do if i else . Tutaj, gdy użytkownik wprowadzi wiek większy niż 60 lat, wykonana się instrukcja elif i wyświetli komunikat „Witam starszego pana”.
Oto podstawowe zastosowania basha. Tutaj nauczyłeś się kilku prostych skryptów basha. Jest o wiele więcej tematów do omówienia, ale więcej na temat Basha znajdzieś w linkach na dole .
W dzisiejszym artykule poznaliśmy podstawy skryptów Bash na naszym systemie Linuxie . Ten samouczek będzie działał nie tylko w Ubunt Linux, ale także na dowolnej dystrybucji Linuksa opartej na Debianie.
Przykłady, ucz się Bash-a edytując pliki innych użytkowników
Gra 2048 sterowana strzałkami na klawiaturze:
https://github.com/JosefZIla/bash2048/blob/master/bash2048.sh

Gra Snake – Sterowanie kierunkiem: h, j, k i l; Zakończ: q
https://github.com/pjhades/bash-snake/blob/master/snake.sh
Gra przygodowa
sudo apt install git
git clone https://github.com/apetro/BashVenture.git
cd BashVenture
bash adventure.sh
Bash w systemie Linux – Więcej:
Podstawy Linux – Wstęp do skryptów Bash
Przydatne proste skrypty dla linuxa
Zachęcam do innych poradników:
Whisper system automatycznego rozpoznawania mowy
Phishing nowoczesny Cyber-złodziej
Przekierowywanie Portów na Routerze
Popraw bezpieczeństwo komputera
Sztuczna inteligencja – ChaptGPT
Sztuczna inteligencja zamiana twarzy DeepFake