Do pisanie prostego skryptu basha musimy wykonać następujące proste kroki:

Jak to wszystko działa:

Pierwsza linia naszego skryptu jest niezbędna do pomyślnego działania naszego skryptu.

druga linia tworzy katalog testdir

trzecia linia pozwala przejść do utworzonego katalogu testdir

zespół dotykać następna linia tworzy trzy pliki

a ostatnia komenda w linii naszego skryptu pozwala wyświetlić zawartość bieżącego katalogu, w którym dzięki poprzedniej linii pojawiły się trzy puste pliki.

Jak widać, w naszym prosty skrypt wszystkie polecenia zaczynają się w nowej linii. Każda linia po uruchomieniu skryptu sekwencyjnie wykonuje swoją pracę, wykonując określone czynności.

Jeśli codziennie uruchamiasz ciąg identycznych poleceń (ze stałymi parametrami) w Linuksie, może mieć sens napisanie tego samego prosty skrypt bash, co pozwoli Ci zaoszczędzić czas i zautomatyzować pracę.

Często zdarza się, że trzeba zautomatyzować jakąś akcję. Skrypty Bash zawsze przychodzą na ratunek!
Nie zapominaj, że aby skrypt został uruchomiony, musisz zmienić do niego prawa dostępu, dodając możliwość wykonania pliku.

1. Wejście-wyjście, przekierowanie

#!/bin/bash # Każdy skrypt powłoki zawsze zaczyna się od linii #!/bin/bash (lub #!/bin/sh) # Komentarze zawsze zaczynają się od # # Aby wyświetlić wiadomość, użyj polecenia ECHO echo "hello, świat" # i to jest przykład sformatowanego wyjścia...

prawie jak C printf "sformatowane wyjście dziesięć=%d string=%s float=%f hex_number=0x%X\n" 10 "ciąg" 11.56 234 # przykład odczytu danych z klawiatury read A echo $A printf " właśnie wprowadzono słowo : %s\n" "$A" #przekierowanie, potoki, pobieranie danych wyjściowych innego programu #przykład generowania 10-literowego hasła PASSWORD1=`cat /dev/urandom | tr -d -c ‘a-zA-Z0-9’ | krotnie -w 10 | nagłówek -1` echo Hasło=$PASSWORD1 #cudzysłowy postaci " podaj wynik wyjścia na ekran co jest w nich (tzn. program lub skrypt napisany wewnątrz takich cudzysłowów jest wykonywany i wynik jest przez nie wypisywany na #standard output jest wynikiem operacji "backquotes" #w tym przypadku wynikiem jest wyjście potoku z wielu programów.

Ciekawe skrypty bash dla miłośników terminali linuksowych

#operacja | stojaki na przenośnik. Tych. w naszym przykładzie: #cat /dev/urandom wypisuje na standardowe wyjście zawartość pliku /dev/urandom (specjalnego pliku do generowania liczb pseudolosowych). zastępuje niektóre bajty innymi (jest to konieczne, aby uniknąć pojawienia się w haśle znaków niedrukowalnych) #fold dzieli to, co otrzymała na std.in na wiersze o długości 10 znaków i wypisuje to na standardowe wyjście #head -1 wypisuje pierwszy wiersz co do niej przyszło na standardowym wejściu. # lub tak: PASSWORD2=`cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c10` echo Hasło=$PASSWORD2

2. Działania arytmetyczne, cykle przez ilość razy

#!/bin/bash A="10" B="5" C=`wyraż $A + $B` printf "A=10 B=5 C=wyraż \$A + \$B C=%d \n" "$C" # zapętlić przykład I=0 while [ $I -lt 15 ] do printf "0x%02x " "$I" I=`expr $I + 1` done echo

3. Różne rodzaje kontroli

#!/bin/bash # przykład sprawdzenia istnienia pliku # utwórz plik test1 touch test1 # sprawdź istnienie pliku test1 if [ -f test1 ] ; then echo "plik test1 istnieje" fi # sprawdź czy plik test2 nie istnieje jeśli ! [ -f test2 ] ; then echo "plik test2 nie istnieje" fi # krótkie odniesienie do innych opcji poleceń # -d nazwa_pliku katalog istnieje # -f nazwa_pliku plik istnieje # -L nazwa_pliku dowiązanie symboliczne istnieje # -r, -w, -x plik jest możliwy do odczytu, zapisu lub do # -s nazwa_pliku plik istnieje i ma niezerową długość # f1 -nt f2 f1 jest nowszy niż f2 # f1 -ot f2 f1 jest starszy niż f2

Tagi: bash, freebsd, muszla

Napisz komentarz przez:

Jak napisać prosty skrypt basha

Jak uruchomić kilka poleceń po kolei lub wszystkie naraz? Jeśli musisz uruchomić kilka poleceń, symbol „ ; » nazwany metaznakiem. Składnia jest następująca polecenie1;polecenie2;polecenie3

Polecenia oddzielone „ ; » są wykonywane sekwencyjnie. Powłoka czeka na następne polecenie i powraca do wiersza poleceń po wykonaniu ostatniego polecenia.

Jednoczesne wykonywanie kilku poleceń

Aby uruchomić wiele poleceń naraz, umieszczając znak ampersand „&” na końcu polecenia. Rozważmy na przykład początek skryptu kopii zapasowej:

# /root/ftpbackup.sh &

A twój terminal jest darmowy do dalszego użytku, nie musisz czekać na zakończenie wykonywania skryptu /root/ftpbackup.sh!

Używając wszystkiego razem

Możesz mieć tysiące plików *.bak. Ale wszystko, co musisz zrobić, to wymienić kategorie, które chcesz, i umieścić wszystko w /tmp/list:

# dla d w "/home/sales /home/dbs /data1"; znajdź $d -iname "*.bak" >> /tmp/list; Gotowe &

Źródło

Nauka BASH (podstawy)

Data:2012-12-10

Nauka pisania skryptów

W większości Linux składa się ze skryptów, więc po prostu trzeba znać ten język.
W swej istocie jest to po prostu zestaw poleceń Linuksa, połączonych za pomocą różnych konstrukcji w inteligentny i dobrze przemyślany kod.

Stwórzmy nasz pierwszy skrypt.
Aby to zrobić, po prostu otwórz edytor tekstu i wypełnij plik następującymi elementami:

#!/kosz/bash
kto; data

Tutaj wszystko jest proste.
Zasadniczo znak hash (#) jest ogólnie uważany za początek komentarza, ale tutaj, zaczynając od pierwszego wiersza, mówi nam, że należy użyć interpretera bash.

1) Niezbędne jest nadanie uprawnień do wykonania

chmod u+x bash1.sh

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/game

I przenieś ten plik do jednego z katalogów, chyba że musisz odwoływać się do niego po prostu nazwą, a nie pełną lokalizacją.

Tutaj przyjrzeliśmy się, jak tworzony jest skrypt, potem jest kilka rzeczy do zrozumienia.

Ilekroć piszemy skrypty, będziemy obsługiwać zmienne, przekierowywać dane wejściowe i wyjściowe, pracować z potokami i wykonywać obliczenia matematyczne.

Zmienne

Aby zdefiniować nową zmienną, po prostu powiedz:

#!/kosz/bash
F=Iwan
I=Iwanow
O=Iwanich
#Wyświetlane z:
echo "FIO $F $I $O"

Wynik

sh bash2.sh
FIO Iwan Iwanow Iwanicz

Zobacz zmienne;
# ustawić

BASH=/bin/bash
HISTFILE=/root/.bash_history
HISTFILESIZE=500
ROZMIAR HIST=500
STRONA GŁÓWNA=/korzeń
SSH_CLIENT='192.168.200.3 9382 22'
SSH_CONNECTION='192.168.200.3 9382 192.168.200.252 22'

Jest jeszcze jeden bardzo interesujący i użyteczny sposób na ustawienie zmiennej za pomocą ``

#!/kosz/bash
dzień=`data +%r%m%d`
# W przyszłości zmienną $day można wstawić do skryptu, na przykład kopii zapasowej

rsync -avz /root/data /root/backup.$day

W wyniku wykonania takiego skryptu pojawi się kopia zapasowa z definicją daty utworzenia kopii zapasowej.

Przekierowanie wejścia i wyjścia.

> Przekieruj do pliku z całkowitym nadpisaniem zawartości pliku
>> Przekieruj do dołączenia do pliku, na końcu istniejącej treści.
ls -al / > 123
I polecenie:
ls -al /home >> 123
Wymień wszystkie pliki z katalogu głównego, a następnie dodaj zawartość katalogu domowego
to przekierowanie nazywa się przekierowaniem wyjścia
Przekierowanie wejścia — treść jest przekierowywana do polecenia.
sortować< sort.txt
Polecenie sort sortuje alfabetycznie, w wyniku czego losowo wypełniony plik sort.txt po przekierowaniu do programu sort zostanie posortowany alfabetycznie
sortować< sort.txt | more — а построение в канал отобразит отсортированные данные постранично
sortować< sort.txt | grep s | more — отсортирует и выведет все со знаком «S»

Kolejną przydatną rzeczą jest przekazywanie wyniku jednego polecenia do drugiego lub kilku.
Przykładem tego może być:

kot /var/log/maillog | grep zablokowany | jeszcze

1) cat - wyświetla cały plik dziennika
2) następnie ten plik dziennika jest przekazywany do przetworzenia do polecenia grep, które wyświetla się tylko z zablokowanym, ale ponieważ jest wiele komunikatów o tym statusie, konieczne jest przekazanie go do polecenia more
3) więcej - niezbędne dla danych stronicowania

Taka sekwencja poleceń nazywana jest transmisją w kanale, gdy dane z jednego polecenia przekazywane są do przetworzenia do drugiego, a te do drugiego i tak dalej, aż przyjmą pożądaną formę.

Obliczenia matematyczne

Najłatwiejszym sposobem na matematykę w Linuksie jest użycie polecenia bc.
W takim przypadku nie należy ustawiać liczby miejsc dziesiętnych po liczbie zmiennoprzecinkowej za pomocą skali

#!/kosz/bash
zm1=45
zm2=22
var3=`echo "skala=3; $zmienna1/$zmienna2" | BC`
echo $zmienna3

Plutonit.ru - Administracja, konfiguracja Linux i Windows 2009 - 2018

Błąd bazy danych: tabela „a111530_forumnew.rlf1_users” nie istnieje

Strona główna -> MyLDP -> eBooki o Linuksie

Tworzenie i uruchamianie skryptu

Napisz scenariusz i wybierz dla niego nazwę

Skrypt powłoki to sekwencja poleceń, których można używać wielokrotnie. Ta sekwencja jest zwykle wykonywana przez wpisanie nazwy skryptu w wierszu poleceń. Ponadto za pomocą crona możesz używać skryptów do automatyzacji zadań. Innym zastosowaniem skryptów jest uruchamianie i zamykanie systemu UNIX, gdzie skrypty startowe definiują operacje na demonach i usługach.

Aby utworzyć skrypt powłoki, otwórz nowy pusty plik w edytorze. Możesz użyć do tego dowolnego edytora tekstu: krzepkość, emacs, gedit, dtpad itp.; każdy zrobi. Możesz jednak wybrać bardziej zaawansowany edytor, taki jak krzepkość lub emacs, ponieważ takie edytory można skonfigurować tak, aby rozpoznawały składnię powłoki i Bash i mogą być dobrą pomocą w zapobieganiu błędom, które często popełniają początkujący, takim jak zapominanie o zamknięciu nawiasów i średników.

Wpisz polecenia UNIX w nowym pustym pliku, tak jakbyś wpisywał je w wierszu poleceń. Jak omówiono w poprzednim rozdziale (zobacz sekcję „Wykonywanie polecenia”), polecenia mogą być funkcjami powłoki, poleceniami wbudowanymi, poleceniami UNIX lub innymi skryptami.

Wybierz nazwę mnemoniczną dla swojego skryptu, która mówi Ci, co robi skrypt. Upewnij się, że nazwa skryptu nie powoduje konfliktu z istniejącymi poleceniami. Aby uniknąć nieporozumień, nazwy skryptów często kończą się rozszerzeniem .sh. Jednak w systemie mogą znajdować się inne skrypty o tej samej nazwie, którą wybrałeś. Polecenia który, gdzie jest i innych, poszukaj informacji o już istniejących programach i plikach o tej nazwie:

which -a nazwa_skryptu whereis nazwa_skryptu zlokalizuj nazwa_skryptu ( ok.przeł.

Pisanie skryptów w Linuksie (uczenie się na przykładach)

: zastąp nazwą swojego skryptu).

Skrypt skrypt1.sh

W tym przykładzie używamy polecenia Echo, wbudowany w Bash, który poinformuje użytkownika o tym, co należy zrobić przed wygenerowaniem danych wyjściowych. Zdecydowanie zaleca się, aby użytkownicy byli informowani o tym, co robi skrypt, aby użytkownicy nie denerwowali się na wypadek, gdyby wydawało im się, że scenariusz nic nie robi. Powrócimy do tematu ostrzegania użytkowników w rozdziale 8, „Pisanie interaktywnego skryptu”.

Rys.2.1. Skrypt skrypt1.sh

Napisz sam scenariusz. Dobrym pomysłem byłoby utworzenie katalogu, w którym będą znajdować się Twoje skrypty. Dodaj ten katalog do zawartości zmiennej:

export PATH="$PATH:~/skrypty"

Jeśli jesteś nowicjuszem w Bash, użyj edytora tekstu, który używa różnych kolorów dla różnych konstrukcji powłoki. Podświetlanie składni jest obsługiwane w krzepkość, gvim, (x)emacs, pisać i wielu innych edytorów, zapoznaj się z dokumentacją swojego ulubionego edytora.

Wykonanie skryptu

Aby skrypt mógł działać, musi mieć uprawnienia do uruchamiania dla odpowiednich użytkowników. Po ustawieniu uprawnień sprawdź, czy rzeczywiście ustawiłeś uprawnienia, których potrzebujesz. Po wykonaniu tej czynności skrypt można uruchomić tak samo, jak każde inne polecenie:

willy:~/skrypty> chmod u+x skrypt1.sh willy:~/skrypty> ls -l skrypt1.sh -rwxrw-r— 1 willy willy 456 grudnia 24 17:11 skrypt1.sh willy:~> skrypt1.sh skrypt zaczyna się teraz. Hej Willy! Pobiorę teraz listę podłączonych użytkowników: 15:38 do 18 dni, 5:37, 4 użytkowników, średnie obciążenie: 0,12, 0,22, 0,15 USER TTY OD [e-mail chroniony] BEZCZYNNY JCPU PCPU CO root tty2 - Sob 14:00 16:25 0,24s 0,05s -bash Willy:0 - Sob 14:00 ? 0,00s? — willy pts/3 — sob 14:00 3:33m 36,39s 36,39s BitchX willy ir willy pts/2 — sob 14:00 3:33m 0,13s 0,06s /usr/bin/screen Ustawiam teraz dwie zmienne. To jest ciąg: czarny A to jest liczba: 9 Oddaję ci teraz twój znak zachęty. willy:~/skrypty> echo $KOLOR willy:~/skrypty> echo $VALUE willy:~/skrypty>

Jest to najczęstszy sposób wykonania skryptu. Takie skrypty najlepiej wykonywać w podpowłoce. Zmienne, funkcje i aliasy utworzone w tej podpowłoce są znane tylko tej konkretnej sesji bash w tej podpowłoce. Po wyjściu z tej powłoki i przejęciu kontroli przez powłokę nadrzędną wszystkie ustawienia zostaną wyczyszczone, a wszelkie zmiany wprowadzone w skrypcie w stanie powłoki zostaną zapomniane.

Jeśli nie określiłeś katalogów lub (katalog bieżący) w zmiennej, możesz aktywować skrypt w następujący sposób:

./nazwa_skryptu.sh

Możliwe jest również wykonanie skryptu w istniejącej powłoce, ale zwykle jest to robione tylko wtedy, gdy zależy Ci na dostępności, na przykład, jeśli chcesz sprawdzić, czy skrypt działa z inną powłoką, lub wysłać traceback do celów debugowania ( ok.przeł.- zamiast tego podaj nazwę swojego skryptu):

rbash nazwa_skryptu.sh sh nazwa_skryptu.sh bash -x nazwa_skryptu.sh

Określona powłoka zostanie uruchomiona jako podpowłoka bieżącej powłoki i wykona skrypt. Odbywa się to, gdy chcesz, aby skrypt został uruchomiony z określonymi parametrami lub w określonych warunkach, które nie są określone w samym skrypcie.

Jeśli nie chcesz uruchamiać nowej powłoki, ale chcesz wykonać skrypt w bieżącej powłoce, użyj polecenia:

nazwa_skryptu źródłowego.sh

W takim przypadku skrypt nie potrzebuje uprawnień do wykonywania. Polecenia są wykonywane w kontekście bieżącej powłoki, więc wszelkie zmiany wprowadzone w środowisku pozostaną widoczne po zakończeniu wykonywania skryptu:

willy:~/scripts> source script1.sh --output pominięte- willy:~/scripts> echo $VALUE 9 willy:~/scripts>

Wiersz poleceń i niewyobrażalne rzeczy, które można z nim zrobić, to znak rozpoznawczy UNIX i wszystkich jego spadkobierców. A tam, gdzie jest linia poleceń, są skrypty. A dziś… nie, nie nauczymy się pisać skryptów, rozważymy te najbardziej przydatne, które można wykorzystać na co dzień do rozwiązywania najróżniejszych zadań, od prognoz pogody i serwera WWW w jedna linijka do bota na Twitterze w dziesięciu linijkach i skrypt do automatycznego uruchamiania dowolnego klienta torrent.

Od razu zrobię zastrzeżenie, że wcale nie jestem zwolennikiem szamanizmu i w żadnym wypadku nie namawiam do siedzenia w zielono-czarnej konsoli i wpisywania kilku liter w celu wykonania czynności, do których jest wystarczy najechać myszką na żądany element w interfejsie graficznym. Jestem jednak przekonany, że konsola i skrypty znacznie lepiej nadają się do rozwiązywania wielu problemów niż interfejs graficzny, dlatego nie można ich lekceważyć. Co więcej, każdy DE umożliwia utworzenie ikony skryptu, więc nie musisz nawet otwierać konsoli, aby go uruchomić.

Proste przykłady

Więc bez zbędnych ceregieli przejdźmy od razu do przykładów:

$ curl ifconfig.com

To proste polecenie pokaże ci zewnętrzny adres IP - idealny, jeśli przejdziesz do sieci przez router. Wszystko, co robi, to po prostu wywołanie serwera ifconfig.co, który zwraca adres IP w jednej linii zamiast pełnej strony internetowej.

I tak, to wcale nie jest skrypt, to tylko polecenie, ale żeby zamienić polecenie w skrypt wystarczy włożyć go do pliku tekstowego i dodać tak zwany shebang jako pierwszą linię, czyli znaki # !, po którym następuje nazwa interpretera poleceń:

$ chmod +x ~/bin/myip.sh

Teraz można go wywołać z wiersza poleceń za pomocą polecenia myip.sh.

#!/bin/sh curl -4 wttr.in/Moscow

Ten skrypt pozwala uzyskać prognozę pogody na cztery dni. Zasada jest tutaj taka sama jak w przypadku ifconfig.co.

Podsumowanie pogody konsoli #!/bin/sh dig +short txt $1.wp.dg.cx

I w ten sposób możesz uzyskać krótki opis czegoś na Wikipedii i za pomocą zapytania DNS zamiast kontaktować się z serwerem WWW. Nawiasem mówiąc, bardzo łatwo jest również stworzyć serwer WWW za pomocą wiersza poleceń:

#!/bin/sh while (nc -l 80< file.html >:) ; robić: ; Gotowe

Ten skrypt jest oparty na narzędziu netcat (nc), które jest nazywane szwajcarskim scyzorykiem do operacji sieciowych. Skrypt uruchamia pętlę wykonującą polecenie nc, która nasłuchuje na porcie 80 i w odpowiedzi na żądanie zwraca plik.html, wysyłając przekazane żądanie do nikąd (symbol oznacza noop, czyli pustą operację).

Korzystając z prostych skryptów i poleceń, możesz łatwo słuchać radia internetowego:

#!/bin/sh mpv --volume=50 -playlista ~/16bit.fm_128.m3u

Oczywiście playlistę w formacie M3U należy wcześniej pobrać ze strony internetowej rozgłośni. Przy okazji, jeśli uruchomisz MPlayera z argumentem --input-ipc-server=/tmp/mpvsocket, można nim sterować, pisząc polecenia do pliku. Na przykład dostosuj głośność:

echo "głośność +10" | socat - /tmp/mpvsocket

Utwórz dwa skrypty: jeden do uruchomienia, drugi do zatrzymania radia (z linią killall mpv), zawieś je na pulpicie i ustaw skróty klawiszowe DE do sterowania odtwarzaniem. Voila, masz gotowy odtwarzacz radia internetowego, który można uruchomić, klikając ikonę na pulpicie. I prawie nie marnuje pamięci ani nie zajmuje tacy.

Odejdźmy jednak od operacji sieciowych i wróćmy do spraw lokalnych.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

To jeden z moich ulubionych scenariuszy. Tworzy archiwum tar.gz bieżącego katalogu. Na szczególną uwagę zasługuje konstrukcja $(PWD##*/), która pobiera pełną ścieżkę do bieżącego katalogu (zmienna $PWD) i usuwa z niego pierwszą część aż do ostatniego ukośnika, pozostawiając tylko nazwę katalogu samo. Ponadto dodaje się do niego rozszerzenie tar.gz. Więcej o takich konstrukcjach można przeczytać w man bash.

#!/bin/sh, gdy prawda; wykonaj inotifywait -r -e MODYFIKUJ KATALOG && TWOJA_KOMENDA gotowe

A to jest skrypt, który uruchamia polecenie w odpowiedzi na zmianę plików w katalogu. Może być używany do wielu różnych celów, takich jak automatyczne włączanie odtwarzacza po zapisaniu pliku MP3. Lub po prostu wyświetl powiadomienie na pulpicie, używając polecenia notification-send:

Powiadom-wyślij "Plik zmieniony"

Pulpit

Skoro mówimy o pulpicie, kontynuujmy. Podobnie jak konsola, można ją również oskryptować. Na przykład, oto skrypt, który ładuje losowe tapety opublikowane na kanale reddit tapet:

Nadal dostępne tylko dla członków

Opcja 1. Dołącz do społeczności „strony”, aby przeczytać wszystkie materiały na stronie

Członkostwo w społeczności w wyznaczonym okresie zapewni ci dostęp do WSZYSTKICH materiałów hakerskich, zwiększy osobistą skumulowaną zniżkę i pozwoli na zgromadzenie profesjonalnej oceny Xakep Score!

Konsola Linuksa to narzędzie, które pozwala na wykonywanie takich manipulacji, na które nie pozwala wiersz poleceń w systemie Windows, konsola Linuksa jest znakiem rozpoznawczym UNIX. Dziś materiał nie jest o tym, jak pisać scenariusze, nie, nie nauczę Cię jak, co i dlaczego. Przyjrzymy się niewielkiemu wyborowi przydatnych skryptów, których można używać na co dzień do rozwiązywania różnego rodzaju zadań, na przykład popatrzeć na pogodę z kilkudniowym wyprzedzeniem, skrypty do serwera WWW w jednej linijce, pisanie bota dla Twittera i skrypt do automatycznego uruchamiania dowolnego klienta torrent.

Ten materiał nie jest napisany po to, abyś angażował się w szamanizm, w żadnym wypadku nie nakłaniam Cię do siedzenia w konsoli i wpisywania setek znaków, aby wykonać pewne czynności, które możesz wykonać w interfejsie graficznym, po prostu najeżdżając myszką na element, który potrzebować. Ale jest jedna rzecz, ale nie zawsze interfejs graficzny jest najlepszym rozwiązaniem, często do rozwiązania wielu problemów konsola i skrypty radzą sobie z zadaniem znacznie lepiej niż aplikacje z interfejsem graficznym, dlatego nie należy zapominać o skryptach, ponieważ one rozwiązać wiele rutynowych prac lepiej niż narzędzia graficzne. Warto też dodać, że dowolny DE pozwala na stworzenie ikony dla swoich skryptów, klikając w którą można je łatwo uruchomić bez otwierania konsoli.

Zacznijmy od prostych przykładów

Poniższe polecenie pokaże ci twój zewnętrzny adres IP - jest to idealne rozwiązanie, jeśli uzyskujesz dostęp do sieci za pomocą routera. To polecenie wywołuje serwer ifconfig.co, który zwraca adres IP w jednej linii bez żadnych dodatkowych bazgrołów, których nie potrzebujesz.

Curl ifconfig.com

Tak, to nie jest skrypt, to jest małe polecenie, ale jeśli chcesz zamienić to polecenie w skrypt, wystarczy umieścić go w pliku tekstowym, w wyniku czego będziemy mieli mały skrypt bash:

#!/bin/bash curl ifconfig.co

Zapisz skrypt w katalogu ~/bin i nadaj uprawnienia do wykonywania:

Chmod +x ~/bin/yourip.sh

Prawie gotowe, możesz wykonać skrypt z wiersza poleceń za pomocą polecenia yourip.sh.

C ip skończone, zobaczmy pogodę z konsoli.

#!/bin/sh curl -4 wttr.in/Kiev

Ten skrypt pozwala uzyskać prognozę pogody na cztery dni, w tym przypadku prognozę pogody dla miasta Kijów.

#!/bin/sh dig + krótki txt $1.wp.dg.cx

Powyżej widać przykład, jak można uzyskać krótki opis czegoś na Wikipedii, w naszym przypadku używamy zapytania DNS zamiast serwera WWW. Serwer WWW za pośrednictwem konsoli jest również bardzo łatwy do stworzenia:

#!/bin/sh while (nc -l 80< file.html >:) ; robić: ; Gotowe

Powyższy skrypt bazuje na narzędziu netcat (nc), często nazywanym szwajcarskim scyzorykiem, ponieważ umożliwia wykonywanie wielu sztuczek podczas operacji sieciowych. Skrypt jest prosty, uruchamia pętlę, która wykonuje polecenie nc, nasłuchuje już 80. portu i w odpowiedzi na żądanie podaje plik.html, wysyłając przekazane żądanie do nikąd (symbol oznacza noop, czyli pustą operację).

Za pomocą prostych skryptów i poleceń możesz słuchać radia internetowego:

#!/bin/sh mpv --volume=50 -playlista ~/16bit.fm_128.m3u

Oczywiście wcześniej musisz pobrać playlistę radia w formacie M3U ze strony internetowej stacji radiowej. Jeśli uruchomisz MPlayera za pomocą argumentu -input-ipc-server=/tmp/mpvsocket, można nim sterować, pisząc polecenia do pliku. Na przykład dostosuj głośność:

echo "głośność +10" | socat - /tmp/mpvsocket

Tworzymy dwa skrypty: pierwszy uruchamiający i drugi wyłączający radio (w którym napiszemy linię killall mpv), a następnie zawieszamy go na pulpicie razem ustawiając skróty klawiszowe DE do sterowania odtwarzaniem. I gotowe, masz odtwarzacz, za pomocą którego możesz słuchać radia internetowego.

Daliśmy się ponieść operacjom sieciowym, przejdźmy do lokalnych.

#!/bin/sh tar -czf "../$(PWD##*/).tar.gz" .

Ten skrypt tworzy archiwum tar.gz dla bieżącego katalogu. Szczególną uwagę należy zwrócić na konstrukcję $(PWD##*/), która pobiera całą ścieżkę do bieżącego katalogu (zmienna $PWD), a następnie usuwa pierwszą część aż do ostatniego ukośnika, pozostawiając tylko nazwę katalogu i dodając rozszerzenie tar.gz. Jeśli chcesz dowiedzieć się więcej o takich konstrukcjach, możesz je przeczytać, wpisując w konsoli man bash.

#!/bin/sh, gdy prawda; wykonaj inotifywait -r -e MODYFIKUJ KATALOG && TWOJA_KOMENDA gotowe

Powyższy skrypt uruchamia polecenie w odpowiedzi na zmianę plików w katalogu. Możesz go używać do różnych celów, na przykład do automatycznego włączania odtwarzacza podczas zapisywania MP3. Lub, na przykład, wyświetl powiadomienie na pulpicie za pomocą polecenia notification-send:

Powiadom-wyślij "Plik zmieniony"

Pulpit

Poniżej zobaczysz przykład skryptu, który ładuje losowe tapety zamieszczone na kanale reddit tapet:

#!/bin/bash wget -O - http://www.reddit.com/r/wallpaper |\ grep -Eo "http://i.imgur.com[^&]+jpg" |\ shuf -n 1 |\ xargs wget -O background.jpg feh --bg-fill background.jpg

Wszystko działa po prostu. Korzystając z narzędzia wget, skrypt pobiera stronę www.reddit.com/r/wallpaper, a następnie przekazuje ją do grep, który już szuka linków do imgur, i wybiera losowy za pomocą shuf, pobiera go za pomocą wget i ustawia go jako tapetę pulpitu, używając polecenia feh (jest to miniaturowa przeglądarka obrazów, którą należy najpierw zainstalować). Możesz dodać ten skrypt do zwykłego pliku tekstowego, jak opisałem powyżej, zapisać go w formacie sh, uczynić go wykonywalnym, dodać do niego ikonę i uruchomić go z pulpitu po kliknięciu, a twoja tapeta się zmieni.

#!/bin/sh state=`synclient | grep Touchpad wyłączony | cut -d "=" -f 2` if [ $stan = "1" ]; wtedy synclient TouchpadOff=0 w przeciwnym razie synclient TouchpadOff=1 fi

Powyższy skrypt służy do włączania i wyłączania touchpada laptopa: włącz, jeśli jest wyłączony i na odwrót. Do poprawnego działania używa narzędzia synclient, które pozwala kontrolować touchpady, które są w większości produkowane przez Synaptics, jest to 90%, a może nawet więcej. Po uruchomieniu narzędzie wyświetla wiele informacji, a także linię TouchpadOff = 1, jeśli jest włączony, i TouchpadOff = 2, jeśli jest wyłączony. Skrypt odczyta te wartości i w zależności od stanu touchpada włączy go lub wyłączy.

!#/bin/bash mpv tv:// -ramki 3 -vo jpeg mv 00000003.jpg zdjęcie.jpg rm -f 0000*.jpg

Korzystając z powyższego skryptu, możesz zrobić zdjęcie za pomocą kamery internetowej. Skrypt wykorzystuje odtwarzacz wideo mpv, który zapisuje pierwsze trzy klatki wykonane przez aparat do plików JPEG o nazwach 0000000.jpg, 00000002.jpg, 00000003.jpg itd. Następnie nazwa trzeciego zdjęcia zostaje zmieniona na photo.jpg plik, a reszta zostanie usunięta. Do czego służą trzy strzały? Są one potrzebne tylko po to, aby aparat miał czas na zainicjowanie, jeśli użyjesz dwóch pierwszych zdjęć, zwykle otrzymasz czarny obraz. Zdarzają się również incydenty z pozycjonowaniem, zdjęcie może być odwrócone; aby tego uniknąć, mpv musi być uruchamiany z flagą -vf flip:

Mpv tv:// -frames 3 -vf flip -vo jpeg

Możesz użyć tego samego polecenia, aby utworzyć kamerę bezpieczeństwa, która robi zdjęcia tylko wtedy, gdy użytkownik dotknie myszy:

#!/bin/bash, gdy prawda; czy sudo cat /dev/input/mouse0 | read -n1 mpv tv:// -frames 3 -vo jpeg mv 00000003.jpg `data +%F-%H-%M`.jpg rm -f 0000*.jpg sen 10 gotowe

Powyższy skrypt używa nieskończonej pętli, pobierającej dane z /dev/input/mouse0. Jeśli są dane, to mysz została przesunięta lub naciśnięto jeden z jej przycisków. Następnie mpv jest używany do tworzenia trzech migawek, trzeci migawka otrzymuje nazwę bieżącej daty, a dwa pierwsze są usuwane.

Jeśli chcesz nagrać cały film z kamery internetowej, możesz użyć takiego skryptu jako przykładu:

#!/bin/bash mencoder tv:// -tv driver=v4l2:width=800:height=600:device=/dev/video0:fps=30:outfmt=yuy2:forceaudio:alsa:adevice=hw.2, 0 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=1800 -ffourcc xvid -oac mp3lame -lameopts cbr=128 -o video.avi

W rezultacie otrzymasz plik o nazwie video.avi w formacie MPEG4, 1800 bitrate oraz plik audio MP3 o 128 bitrate.

#!/bin/bash ffmpeg -f x11grab -r 25 -s 1366x768 -i:0.0 screencast.mpg

Korzystając z powyższego skryptu, możesz nagrać pełny screencast. 1366 × 768 to rozdzielczość pulpitu, możesz ją dostosować dla siebie. Aby zrobić zrzut ekranu pojedynczego okna, możesz użyć polecenia importu:

Importuj zrzut ekranu.png

Jeśli uruchomisz powyższe polecenie, ikona kursora myszy zmieni się w krzyżyk, za pomocą którego możesz wybrać obszar ekranu, tak jak robisz zrzuty ekranu przy użyciu aplikacji lub rozszerzeń innych firm. Jeśli umieścisz to polecenie na jednym ze skrótów klawiszowych, otrzymasz prawie idealny system do tworzenia zrzutów ekranu, a ta kombinacja nie pochłonie twojej pamięci RAM, co czyni ją ogromnym plusem.

Możesz także skonfigurować monitor zewnętrzny za pomocą konsoli:

#!/bin/sh if [ -z "$1" ]; następnie wyjdź fi if [ $1 == "off" ]; then xrandr --output VGA-0 --off xrandr -s 0 else if [ $1 == "on"]; then xrandr --output LVDS --auto --primary --output VGA-0 --auto --po lewej stronie LVDS xrandr --newmode „1920x1080” 173,00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync xrandr -- addmode VGA-0 1920x1080 xrandr --wyjście VGA-0 --tryb 1920x1080 fi xrandr --dpi 96

Ten skrypt opiera się na głównym monitorze o nazwie LVDS i monitorze zewnętrznym o nazwie VGA-0. Jest to standardowa sytuacja dla wszystkich laptopów; jeśli nie jesteś pewien, możesz to sprawdzić, uruchamiając polecenie xrandr: podczas przekazywania argumentu do skryptu wyłączony wyłącza monitor zewnętrzny, argument na z kolei zawiera go, umieszczając go po lewej stronie głównego (argument -po lewej stronie LVDS w pierwszym zespole). Po skrypcie tworzy nową konfigurację dla monitora o rozdzielczości 1920 x 1080 i aktywuje go. I na koniec skrypt ustawia domyślną wartość DPI - bo po podłączeniu monitora o innej rozdzielczości często się zawiesza.

W większości przypadków polecenia xrandr-nowy tryb... oraz xrandr -addmode ... nie są potrzebne, ponieważ Xorg uzyska konfigurację i rozdzielczość monitora za pomocą EDID. Czasami jednak tak się nie dzieje, a ciąg konfiguracyjny podany po argumencie -nowy tryb, musisz go wygenerować samodzielnie za pomocą narzędzia cvt:

CVT 1920 1080

Za pomocą narzędzia cvt można generować niestandardowe rozdzielczości, które nie są obsługiwane przez domyślny monitor.

Wyszukiwanie w Google z wiersza poleceń

Wróćmy do usług sieciowych. Jak uzyskać pierwsze 10 wyników wyszukiwania w Google? Zobacz poniższy skrypt:

#!/bin/bash Q="" URL="https://www.google.de/search?tbs=li:1&q=" AGENT="Mozilla/4.0" stream=$(curl -A "$AGENT" -skLm 10 "$(GOOG_URL)$(Q//\ /+)" | grep -oP "\/url\?q=.+?&" | sed "s|/url?q=||; s| &||") echo -e "$(stream//\%/\x)"

Ten skrypt wysyła żądanie do Google za pomocą curl, zamienia spacje w ciągu wyszukiwania na plusy. Następnie w odpowiedzi HTML pojawiają się linki

Przykład usługi YouTube:

#!/bin/bash mpv -fs -quiet `youtube-dl -g "$1"`

Skrypt z powyższego przykładu odtwarza wideo z identyfikatorem określonym w argumencie za pomocą odtwarzacza mpv. Musisz najpierw zainstalować youtube-dl.

Kilka przykładów pracy z Twitterem. Poniżej zobaczysz pełnoprawny skrypt bota, który akceptuje polecenie jako dane wejściowe, wykonuje je za pomocą interpretera poleceń i wysyła wynik do określonego użytkownika.

#!/bin/bash USER="Twój pseudonim" gdy prawda; zrobić CMD=`echo "/dma +1" | ttytter-skrypt | sed "s/\[.*\]\ //" if [ $CMD != $OLD_CMD ]; następnie REPL=`$CMD` echo "/dm $USER $(REPL:0:140)" | ttytter -script CMD = $OLD_COMD fi sen 60 gotowe

Skrypt korzysta z klienta konsoli ttytter, odczytując ostatnią wartość bezpośredniej wiadomości z pętli, po czym sprawdza, czy ta komenda została wykonana, jeśli nie, wykonuje ją i wysyła do wskazanego użytkownika ze zmienną USER, przycinając do 140 znaków.

Aby wszystko działało, musisz zainstalować narzędzie ttytter, uruchomić je, a następnie skopiować wygenerowany link z konsoli i wkleić go w pasku adresu przeglądarki, przejść przez potwierdzenie, wyrazić zgodę, a następnie otrzymać klucz uwierzytelniający, skopiować i wkleić do konsoli w ttytter. Oczywiście przed tym wszystkim pożądane jest dodanie osobnego użytkownika i zalogowanie się na jego konto.

Możesz użyć Twittera nie tylko do stworzenia bota, ale także do monitorowania maszyny. Poniższy skrypt wysyła wiadomość do feeda z informacją o stanie maszyny (nazwa hosta, uptime, obciążenie, wolna pamięć i obciążenie procesora):

#!/bin/bash HOST=`nazwa hosta -s` UP=`czas pracy | wytnij -d" " -f4,5 | cut -d"," -f1` LOAD=`czas pracy | cut -d":" -f5,6` MEM=`ps aux | awk "( suma += $4 ); END ( print sum )"` CPU=`ps aux | awk "( suma += $3 ); END ( print sum )"` tweet = "Host: $(HOST), czas pracy: $(UP), procesor: $(CPU)%, pamięć: $(MEM)%, loadavg $(LOAD)" if [ $(echo "$(tweet)" | wc -c) -gt 140 ]; następnie echo "FATAL: tweet jest dłuższy niż 140 znaków!" exit 1 fi echo $tweet | ttytter-skrypt

Na koniec przyjrzymy się poniższemu skryptowi, ten skrypt służy do uruchamiania i zatrzymywania klienta torrent, gdy komputer jest bezczynny:

#!/bin/bash IDLE=600000 STOPCMD="zdalna transmisja -S" STARTCMD="zdalna transmisja -s" STOPPED="tak" podczas gdy prawda; wykonaj jeśli [ `xprintidle` -gt $IDLE ]; then if [ $STOPPED = "tak" ]; then $STARTCMD STOPPED="nie" fi else if [ $STOPPED = "nie" ]; następnie $STOPCMD STOPPED="tak" fi uśpienia 60 gotowe

Co minutę skrypt wchodzi w nieskończoną pętlę i sprawdza, ile czasu w milisekundach minęło od wykonania ostatniej akcji przez użytkownika (służy do tego xprintidle). Jeśli minęło 600 000 ms (dziesięć minut), skrypt wykonuje polecenie określone w zmiennej STARTCMD. W przeciwnym razie polecenie STOPCMD jest wykonywane, ale tylko wtedy, gdy przed nim zostało wykonane polecenie STARTCMD. Mówiąc prościej, nic nie robisz na komputerze przez dziesięć minut, po uruchomieniu STARTCMD, w naszym przypadku jest to polecenie, które uruchamia wszystkie pobrania w Transmisji, jeśli nie, wszystkie pobierania są zawieszane. Nie podoba ci się klient Transmission? Używamy poleceń dla Potopu, patrz poniżej:

STOPCMD="Wstrzymanie konsoli zalewowej \*" STARTCMD="Wznowienie konsoli zalewowej \*"

Wniosek

Do pisanie prostego skryptu basha musimy wykonać następujące proste kroki:

Jak to wszystko działa:

Pierwsza linia naszego skryptu #!/bin/bash jest niezbędna do pomyślnego uruchomienia naszego skryptu.

druga linia mkdir testdir tworzy katalog testdir

trzecia linia cd testdir pozwala przejść do utworzonego katalogu testdir

zespół dotykać w następnej linii dotknij plik1 plik2 plik3 tworzy trzy pliki

a ostatnie polecenie w linii naszego skryptu ls -al pozwala nam wyświetlić zawartość bieżącego katalogu, w którym dzięki poprzedniej linii pojawiły się trzy puste pliki.

Jak widać, w naszym prosty skrypt wszystkie polecenia zaczynają się w nowej linii. Każda linia po uruchomieniu skryptu sekwencyjnie wykonuje swoją pracę, wykonując określone czynności.

Jeśli codziennie uruchamiasz ciąg identycznych poleceń (ze stałymi parametrami) w Linuksie, może mieć sens napisanie tego samego prosty skrypt bash, co pozwoli Ci zaoszczędzić czas i zautomatyzować pracę.

Pisanie skryptów w Linuksie (uczenie się na przykładach)

———————————————————————————-

1. Wstęp

Czego potrzebujesz do pisania skryptów
Znajomość narzędzi wiersza poleceń i ich niezbędnych opcji.
Podstawowa znajomość języka angielskiego na poziomie szkoły podstawowej nie będzie przeszkadzać.

Dlaczego potrzebne są skrypty
Po pierwsze, administracja serwerem linuksowym, w takim czy innym stopniu, sprowadza się do systematycznego wykonywania tych samych poleceń. Co więcej, nie jest konieczne, aby te polecenia były wykonywane przez osobę. Mogą być zaprogramowane do wykonania przez maszynę.
Po drugie, nawet wykonanie zwykłego zadania, które (nagle) wynosi 20-1000… powtarzalnych operacji jest DUŻO łatwiejsze do zaimplementowania w skrypcie.

Co to jest skrypt
Skrypt to zestaw instrukcji, które komputer musi wykonać w określonej kolejności iw określonym czasie. Instrukcje mogą być albo wewnętrznymi poleceniami powłoki (pętle, warunki, przetwarzanie informacji tekstowych, praca ze zmiennymi środowiskowymi itp.), albo dowolnym programem, który wykonujemy w konsoli z niezbędnymi parametrami.

Jak napisać scenariusz
W naszym przypadku skrypt będzie plikiem tekstowym z atrybutami wykonania. Jeśli plik skryptu zaczyna się od #!, co w świecie UNIXa nazywa się sha-bang, informuje to system, którego interpretera ma użyć do wykonania skryptu. Jeśli jest to trudne do zrozumienia, pamiętaj tylko, że zaczniemy pisać wszystkie skrypty od linii #!/bin/bash lub #!/bin/sh, a potem polecenia i komentarze do nich pójdą.

pożegnalne słowo
Szczerze radzę napisać jak najwięcej komentarzy do prawie każdej linii w skrypcie. Czas minie i będziesz musiał zmienić lub unowocześnić napisany raz scenariusz. Jeśli nie pamiętasz lub nie rozumiesz, co jest napisane w skrypcie, trudno to zmienić, łatwiej jest pisać od zera.

Jakie skrypty możemy potrzebować:

    ustawianie reguł zapory podczas uruchamiania systemu.
    wykonywanie kopii zapasowej ustawień i danych.
    dodawanie skrzynek pocztowych do serwera pocztowego (a dokładniej do bazy mysql)
    uruchamianie o określonej godzinie (najlepiej co noc) programu, który skanuje logi serwera proxy i wydaje wygodny raport internetowy o ilości pobieranego ruchu.
    przesyłanie nam drogą mailową informacji o tym, że ktoś uzyskał dostęp do naszego serwera przez ssh, czas połączenia i adres klienta.

O technice skryptowej
Tworzymy plik tekstowy, edytujemy go, ustawiamy uprawnienia wykonawcze, uruchamiamy, sprawdzamy błędy, naprawiamy, uruchamiamy, sprawdzamy błędy...
Gdy wszystko jest lizane i działa poprawnie, umieszczamy to w autoloadzie lub w harmonogramie na określony czas.

———————————————————————————-

2. Nauka pisania skryptów w wewnętrznym języku BASH
oryginał: https://www.linuxconfig.org/Bash_scripting_Tutorial

Ten przewodnik nie zakłada wcześniejszej wiedzy na temat pisania skryptów (zwanych dalej skryptami) przy użyciu wewnętrznego języka Bash. Z pomocą tego poradnika szybko odkryjesz, że pisanie skryptów to bardzo proste zadanie. Zacznijmy nasz samouczek od prostego skryptu, który wyświetla ciąg „Hello World!” (przetłumaczone z angielskiego - Witam wszystkich!)

1. Scenariusz „Witam wszystkich”
Oto twój pierwszy przykład skryptu basha:

#!/kosz/bash
echo "Witaj świecie"

Przejdź do katalogu zawierającego nasz plik hello_world.sh i uczyń go wykonywalnym:

Kod: Zaznacz wszystkie $ chmod +x hello_world.sh

Uruchom skrypt do wykonania

Kod: Zaznacz wszystkie $ ./hello_world.sh

2. Prosty skrypt do archiwizacji bash

#!/kosz/bash
tar -czf katalog_mojego_domu.tar.gz /home/użytkownik

Kod: Zaznacz wszystkie $ ./backup.sh

$ du -sh katalog_mojego_domu.tar.gz
41 mln mój katalog_domowy.tar.gz

3. Praca ze zmiennymi
W tym przykładzie deklarujemy prostą zmienną i wyświetlamy ją na ekranie za pomocą polecenia echo.

#!/kosz/bash
STRING="WITAJCIE ŚWIECIE!!!"
echo $STRING

Kod: Zaznacz wszystkie $ ./hello_world.sh
WITAJ ŚWIECIE!!!

Nasz skrypt archiwizujący ze zmiennymi:

#!/kosz/bash
OF=myhome_directory_$(data +%Y%m%d).tar.gz
JEŻELI=/dom/użytkownik
tar -czf $OF $JEŻELI

Kod: Zaznacz wszystkie $ ./backup.sh
tar: Usuwanie początkowego „\" z nazw członków
$ du -sh *tar.gz
41 mln mój katalog_domowy_201000123.tar.gz

3.1 Zmienne globalne i lokalne

#!/kosz/bash
# Zadeklaruj zmienną globalną
# Ta zmienna może być używana w dowolnym miejscu w tym skrypcie
VAR="zmienna globalna"
funkcja bash (
# Zadeklaruj zmienną lokalną
# Taka zmienna jest ważna tylko dla funkcji, w której jest zadeklarowana
local VAR="zmienne lokalne"
echo $VAR
}
echo $VAR
grzmotnąć
# Zauważ, że zmienna globalna się nie zmieniła
echo $VAR

Kod: Zaznacz wszystkie $ ./variables.sh
zmienna globalna
zmienna lokalna
zmienna globalna

4. Przekazywanie argumentów do skryptu

#!/kosz/bash
# Użyj predefiniowanych zmiennych, aby uzyskać dostęp do argumentów
# Wydrukuj argumenty na ekranie
echo $1 $2 $3 ‘ -> echo $1 $2 $3’

#Możemy również uzyskać dostęp do argumentów poprzez specjalną tablicę args=(" [e-mail chroniony]»)
# Wydrukuj argumenty na ekranie
echo $(args) $(args) $(args) ‘ -> args=(“ [e-mail chroniony]»); echo $(argumenty) $(argumenty) $(argumenty)'

# Użyj zmiennej [e-mail chroniony] wyświetlić wszystkie argumenty na raz
Echo [e-mail chroniony]' -> echo [e-mail chroniony]

Użyj zmiennej $#, aby wyświetlić liczbę argumentów przekazanych do skryptu
echo Liczba przekazanych argumentów: $# ‘ -> echo Liczba przekazanych argumentów: $#’

Kod: Zaznacz wszystkie $ ./arguments.sh Bash Scripting Tutorial
Bash Scripting Tutorial -> echo $1 $2 $3
Samouczek dotyczący skryptów Bash -> args=(" [e-mail chroniony]"); echo $(args) $(args) $(args)
Samouczek dotyczący skryptów Bash -> echo [e-mail chroniony]
Liczba przekazanych argumentów: 3 -> echo Liczba przekazanych argumentów: $#

5. Wykonywanie poleceń powłoki w skrypcie

#!/kosz/bash
# użyj backticków » ` ` », aby wykonać polecenie powłoki
echo `uname -o`
# teraz spróbujmy bez cudzysłowów
echo uname -o

Kod: Zaznacz wszystkie $ uname -o
GNU/Linux
$ ./bash_backtricks.sh
GNU/Linux
bezimienny

Jak widać, w drugim przypadku zostało wyświetlone samo polecenie, a nie wynik jego wykonania.

6. Czytaj dane wprowadzone przez użytkownika (interaktywność)

#!/kosz/bash
echo -e "Cześć, wpisz słowo: \c"
przeczytaj słowo
echo "Wprowadzone słowo to: $słowo"
echo -e "Czy możesz wpisać dwa słowa? »
przeczytaj słowo1 słowo2
echo "Oto twoje dane wejściowe: \"$słowo1\" \"$słowo2\""
echo -e "Co myślisz o skryptach basha? »
# polecenie read przechowuje teraz odpowiedź w domyślnej zmiennej wbudowanej $REPLY
czytać
echo "Powiedziałeś $ODPOWIEDŹ, cieszę się, że to słyszę! »
echo -e "Jakie są twoje ulubione kolory ? »
# -a powoduje odczytanie polecenia odczytu do tablicy
przeczytaj -a kolory
echo "Moje ulubione kolory to także $(kolory), $(kolory) i $(kolory):-)"

Kod: Zaznacz wszystkie $ ./read.sh
Cześć, wpisz słowo: coś
Wpisane słowo to: coś
Czy możesz wpisać dwa słowa?
Debian Linux
Oto twój wkład: "Debian" "Linux"
Co sądzisz o pisaniu skryptów basha?
Dobry
Powiedziałeś dobrze, cieszę się, że to słyszę!
Jakie są Twoje ulubione kolory?
niebieski zielony czarny
Moje ulubione kolory to także niebieski, zielony i czarny :-)

7. Korzystanie z pułapki

#!/kosz/bash
# zadeklaruj pułapkę
pułapka bashtrap INT
# wyczyść ekran
jasne;
# funkcja przechwytująca jest wykonywana, gdy użytkownik naciśnie CTRL-C:
# Wyświetli => Wykonanie podprogramu bash trap !
# ale skrypt będzie nadal działał
bashtrap()
{
echo "Wykryto CTRL+C !…wykonywanie pułapki bash !"
}
# skrypt liczy do 10
dla a w "seq 1 10"; robić
echo "$a/10 do wyjścia."
sen1;
Gotowe
echo "Przykład wyjścia z pułapki Bash!!!"

Kod: Zaznacz wszystkie $ ./trap.sh
1/10
2/10
3/10
4/10
5/10
6/10

7/10
8/10
9/10
CTRL+C wykryto !...wykonywanie pułapki bash !
10/10
Przykład wyjścia z pułapki Bash!!!

Jak widać, kombinacja klawiszy Ctrl-C nie zatrzymała wykonywania skryptu.

8. Tablice
8.1 Deklarowanie prostej tablicy

#!/kosz/bash
# Zadeklaruj prostą tablicę z 4 elementami
ARRAY=('Debian Linux' 'Redhat Linux' Ubuntu Linux)
# Pobierz liczbę elementów w tablicy
ELEMENTS=$(#TABLICA[@])

# pętla przez każdy element tablicy
dla ((i=0;i<$ELEMENTS;i++)); do
echo $(TABLICA[$(i)])
Gotowe

Kod: Zaznacz wszystkie $./arrays.sh
Debian Linux
linux redhat
ubuntu
linux

8.2 Wypełnianie tablicy wartościami z pliku

#!/kosz/bash
# Zadeklaruj tablicę
zadeklaruj -a ARRAY
# exec polecenie # stdin (zwykle klawiatura) zostanie utworzone z tego pliku. Dzięki temu można czytać
# zawartość pliku, wiersz po wierszu, i parsuj każdy wiersz wprowadzony za pomocą sed i/lub awk.
exec 10 letcount=0

podczas czytania LINE<&10; do

TABLICA[$liczba]=$LINE
((liczba++))
Gotowe

echo Liczba elementów: $(#ARRAY[@])
# Wyświetl wartości tablicy
echo $(TABLICA[@])
# zamknij plik
exec 10>&-

Kod: Zaznacz wszystkie $cat bash.txt
Debian Linux
linux redhat
ubuntu
linux
$ ./tablice.sh
Liczba elementów: 4
Debian Linux Redhat Linux Ubuntu Linux

9. Warunki „jeśli to inaczej”
9.1. Proste użycie warunków „jeżeli-w przeciwnym razie”
Zwróć uwagę na spacje w nawiasach kwadratowych, bez których warunek nie zadziała.

#!/kosz/bash
directory="./BashScripting"

# sprawdź, czy katalog istnieje
if [ -d $katalog ]; następnie
echo "Katalog istnieje"
w przeciwnym razie
echo "Katalog nie istnieje"
fi

Kod: Zaznacz wszystkie $ ./if_else.sh
Katalog nie istnieje
$ mkdir BashScripting
$ ./if_else.sh
Katalog istnieje

9.2 Zagnieżdżone warunki if-else

#!/kosz/bash
# Zadeklaruj zmienną o wartości 4
wybór=4
# Wyświetlacz
echo "1. grzmotnąć"
echo "2. Skrypty»
echo "3. Instruktaż"

# Wykonaj, gdy zmienna jest równa czterem
# zapętlanie
while [ $wybór -eq 4 ]; robić

# przeczytaj dane wprowadzone przez użytkownika
przeczytaj wybór
# zagnieżdżony warunek "if-else"
if [ $wybór -eq 1 ] ; następnie

echo "Wybrałeś słowo: Bash"

if [ $wybór -eq 2 ] ; następnie
echo "Wybrałeś słowo: Skrypty"
w przeciwnym razie

if [ $wybór -eq 3 ] ; następnie
echo "Wybrałeś słowo: Samouczek"
w przeciwnym razie
echo "Proszę dokonać wyboru między 1-3!"
echo "1. grzmotnąć"
echo "2. Skrypty»
echo "3. Instruktaż"
echo -n "Proszę wybrać słowo ? »
wybór=4
fi
fi
fi
Gotowe

Kod: Zaznacz wszystkie $ ./nested.sh
1. bash
2. Skrypty
3. Samouczek

5

1. bash
2. Skrypty
3. Samouczek
Proszę wybrać słowo
4
Proszę dokonać wyboru pomiędzy 1-3 !
1. bash
2. Skrypty
3. Samouczek
Proszę wybrać słowo
3
Wybrałeś słowo: Tutorial

W ten sposób najpierw wykonywane jest ciało pętli „while”, ponieważ zmienna wyboru jest początkowo ustawiona na cztery. Następnie wczytujemy do niego dane wejściowe użytkownika, a jeśli dane wejściowe nie są równe 1,2 lub 3, to ponownie ustawiamy naszą zmienną na 4, w związku z czym ciało pętli się powtarza (trzeba ponownie wpisać 1,2 lub 3).

10. Porównania
10.1 Porównania arytmetyczne

Lt<
-gt>
-le<=
-ge >=
-równ ==
-ne !=

#!/kosz/bash

NUM1=2
NUM2=2
if [ $LICZ1 -eq $LICZ2]; następnie
echo "Obie wartości są równe"
w przeciwnym razie
echo "Wartości NIE są równe"
fi

Kod: Zaznacz wszystkie $ ./equals.sh
Obie wartości są równe

#!/kosz/bash
# Zadeklaruj zmienne z wartościami całkowitymi
NUM1=2
NUM2=3
if [ $LICZ1 -eq $LICZ2]; następnie
echo "Obie wartości są równe"
w przeciwnym razie
echo "Wartości NIE są równe"
fi

Kod: Zaznacz wszystkie $ ./equals.sh
Wartości NIE są równe

#!/kosz/bash
# Zadeklaruj zmienne z wartościami całkowitymi
NUM1=2
NUM2=1
if [ $LICZ1 -eq $LICZ2]; następnie
echo "Obie wartości są równe"
elif [ $LICZ1 -gt $LICZ2 ]; następnie
echo "$NUM1 jest większe niż $NUM2"
w przeciwnym razie
echo "$NUM2 jest większe niż $NUM1"
fi

Kod: Zaznacz wszystkie $ ./equals.sh
2 jest większe niż 1

10.2 Porównania znaków z tekstem

Ten sam
!= nie to samo
< меньще чем
> więcej niż
-n zmienna s1 s1 nie jest pusta
-z s1 zmienna s1 jest pusta

#!/kosz/bash

S1="Uderzenie"

S2="Skrypty"
if [ $S1 = $S2 ]; następnie

w przeciwnym razie
echo "Ciągi NIE są równe"
fi

Kod: Zaznacz wszystkie $ ./statement.sh
Ciągi NIE są równe

#!/kosz/bash
# Zadeklaruj zmienną symboliczną S1
S1="Uderzenie"
# Zadeklaruj zmienną symboliczną S2
S2="Uderz"
if [ $S1 = $S2 ]; następnie
echo "Oba ciągi są równe"
w przeciwnym razie
echo "Ciągi NIE są równe"
fi

Kod: Zaznacz wszystkie $ ./statement.sh
Oba ciągi są równe

11. Sprawdzanie plików

B nazwa pliku Blokuj specjalny plik
-c nazwa pliku plik znaków specjalnych
-d nazwa_katalogu Sprawdź, czy istnieje katalog
-e nazwa pliku Sprawdź, czy istnieje plik
-f nazwa_pliku Sprawdź, czy istnieje zwykły plik, a nie katalog
-G nazwa pliku Sprawdź, czy plik istnieje i czy należy do efektywnego identyfikatora grupy.
-g nazwa_pliku prawda, jeśli plik istnieje i ma ustawiony identyfikator grupy.
-k nazwa pliku Przyklejony bit
-L nazwa pliku Dowiązanie symboliczne
-O nazwa pliku Prawda, jeśli plik istnieje i należy do efektywnego identyfikatora użytkownika.
-r nazwa pliku Sprawdź, czy plik jest czytelny
-S nazwa pliku Sprawdź, czy plik jest gniazdem
-s nazwa pliku Sprawdź, czy plik ma niezerowy rozmiar
-u nazwa_pliku Sprawdź, czy bit set-ser-id pliku jest ustawiony
-w nazwa pliku Sprawdź, czy plik jest zapisywalny
-x nazwa pliku Sprawdź, czy plik jest wykonywalny

#!/kosz/bash
plik="./plik"
if [ -e $plik ]; następnie
echo "Plik istnieje"
w przeciwnym razie
echo "Plik nie istnieje"
fi

Kod: Zaznacz wszystkie $ ls
plik.sh
$ ./plik.sh
Plik nie istnieje
$ kliknij plik
$ls
plik plik.sh
$ ./plik.sh
plik istnieje

Podobnie w przykładzie możemy użyć pętli „while”, aby sprawdzić, czy plik nie istnieje. Ten skrypt będzie uśpiony, dopóki plik nie będzie istniał. Zwróć uwagę na negatywny Bash „!” co neguje (odwraca) opcję -e.

12. Cykle
12.1. Dla pętli

#!/kosz/bash
# dla pętli
dla f w $(ls /var/); robić
echo $f
Gotowe

Uruchamianie pętli for z wiersza poleceń bash:

Kod: Zaznacz wszystkie $ dla f w $(ls /var/); wykonaj echo $f; gotowe Kod: Zaznacz wszystkie $ dla f w $(ls /var/); wykonaj echo $f; Gotowe
kopie zapasowe
Pamięć podręczna
rozbić się
Gry
lib
lokalny
Zamek
dziennik
Poczta
optować
biegać
szpula
tmp
www

12.2. podczas pętli

#!/kosz/bash
LICZBA=6
# podczas pętli
while [ $COUNT -gt 0 ]; robić

niech LICZBA=LICZBA-1
Gotowe

Kod: Zaznacz wszystkie $ ./while_loop.sh
Wartość zliczenia to: 6
Wartość zliczenia to: 5
Wartość zliczenia to: 4
Wartość zliczenia to: 3
Wartość zliczenia to: 2
Wartość zliczenia to: 1

12.3. aż do pętli

#!/kosz/bash
LICZBA=0
#do pętli
do [$COUNT -gt 5]; robić
echo Wartość licznika to: $COUNT
niech LICZBA=LICZBA+1
Gotowe

Kod: Zaznacz wszystkie $ ./until_loop.sh
Wartość zliczenia to: 0
Wartość zliczenia to: 1
Wartość zliczenia to: 2
Wartość zliczenia to: 3
Wartość zliczenia to: 4
Wartość zliczenia to: 5

12.4. Pętle z niejawnymi warunkami
W poniższym przykładzie warunkiem pętli while jest obecność standardowego wejścia.
Treść pętli będzie działała tak długo, jak długo istnieje coś do przekierowania ze standardowego wyjścia do polecenia read.

#!/kosz/bash
# Ten skrypt znajdzie i usunie spacje
# w plikach, zastępując je podkreśleniami
DIR="."
Sterowanie pętlą za pomocą polecenia read poprzez przekierowanie danych wyjściowych w pętli.
znajdź $DIR -typ f | podczas czytania pliku; robić
# użyj klasy POSIX [:space:], aby znaleźć spacje w nazwach plików
if [[ "$plik" = *[[:spacja:]]* ]]; następnie
# zamień spacje na podkreślenia
mv "$plik" `echo $plik | tr ‘ ‘ ‘_’`
fi;
Gotowe

Kod: Zaznacz wszystkie $ ls -1
skrypt.sh
$ dotknij "plik ze spacjami"
$ ls -1
plik ze spacjami
skrypt.sh
$ ./skrypt.sh
$ ls -1
file_with_spaces
skrypt.sh

13. Funkcje

#!/kosz/bash
# Funkcje można deklarować w dowolnej kolejności
funkcja funkcja_B(
funkcja echa B.
}
funkcja funkcja_A(
echo $1
}
funkcja funkcja_D(
funkcja echo D.
}
funkcja_C(
echo $1
}
# Funkcje połączeń
# przekaż parametr do funkcji A
function_A "Funkcja A."
funkcja_B
# przekaż parametr do funkcji C funkcji
function_C "Funkcja C."
funkcja_D

Kod: Zaznacz wszystkie $ ./functions.sh
Funkcja A.
Funkcja B.
Funkcja C.
Funkcja D.

14. Wybierz operatora - Wybierz

#!/kosz/bash
PS3='Wybierz jedno słowo:'
# Wybierz
wybierz słowo w "linux" "bash" "skrypty" "samouczek"
robić
echo "Wybranym słowem jest: $słowo"
# Przerwij, w przeciwnym razie pętla będzie nieskończona.
przerwanie
Gotowe
wyjście 0

Kod: Zaznacz wszystkie $ ./select.sh
1) linux
2) bash
3) skrypty
4) samouczek
Wybierz jedno słowo: 4
Wybrane przez Ciebie słowo to: samouczek

15. Operator selekcji - Case

#!/kosz/bash
echo "Jaki jest twój preferowany język programowania / skryptowy"
echo "1) bash"
echo "2) perl"
echo "3) fiton"
echo "4) c++"
echo "5) Nie wiem!"
przeczytaj przypadek;
# prosta struktura przypadku-wyboru
# zauważ, że w tym przykładzie $case to tylko zmienna
# i nie musi tak się nazywać. To tylko przykład
$przypadek w
1) echo "Wybrałeś bash";;
2) echo "Wybrałeś perla";;
3) echo "Wybrałeś fiton";;
4) echo "Wybrałeś c++";;
5) wyjście
esac

Kod: Zaznacz wszystkie $ ./case.sh
Jaki jest twój preferowany język programowania / skryptowania?
1) bash
2) perł
3) fiton
4) c++
5) Nie wiem!
4
Wybrałeś c++

———————————————————————————-

Bardziej szczegółowe informacje można uzyskać z różnych źródeł, na przykład tutaj
oryginał: https://www.linuxconfig.org/Bash_scripting_Tutorial
https://ruslandh.narod.ru/howto_ru/Bash-Prog-Intro/
https://bug.cf1.ru/2005-03-17/programmin … -book.html

https://ubuntologia.ru/forum/viewtopic.php?f=109&t=2296