Bash skripte: početak

Bash skripte: početak
Bash skripte 2. dio: Petlje
Bash skripte, 3. dio: Opcije i prekidači naredbenog retka
Bash skripte, dio 4: Ulaz i izlaz
Bash skripte, 5. dio: Signali, pozadinski zadaci, upravljanje skriptama
Bash skripte, 6. dio: Funkcije i razvoj knjižnice
Bash skripte, 7. dio: sed i obrada teksta
Bash skripte, 8. dio: awk jezik za obradu podataka
Bash skripte, dio 9: Regularni izrazi
Bash skripte, 10. dio: Praktični primjeri
Bash skripte, 11. dio: očekivanje i automatizacija interaktivnih uslužnih programa

Danas ćemo govoriti o bash skriptama. ovo - skripte naredbenog retka, napisano za bash ljusku. Postoje i druge ljuske kao što su zsh, tcsh, ksh, ali mi ćemo se fokusirati na bash. Ovaj materijal je namijenjen svima, jedini uvjet je sposobnost rada u naredbeni redak Linux.

Bash skripte: početak

Skripte naredbenog retka su zbirke istih naredbi koje se mogu unijeti s tipkovnice, skupljene u datoteke i objedinjene nekom zajedničkom svrhom. U tom slučaju rezultati rada timova mogu imati neovisnu vrijednost ili poslužiti kao ulazni podaci za druge timove. Skripte su moćan način automatizacije radnji koje se često izvode.

Bash skripte: početak

Dakle, ako govorimo o naredbenom retku, on vam omogućuje izvršavanje nekoliko naredbi odjednom unosom odvojenih točkom i zarezom:

pwd ; whoami

Zapravo, ako ste ovo pokušali na svom terminalu, vaša prva bash skripta koja uključuje dvije naredbe već je napisana. Radi ovako. Tim prvi pwd prikazuje informacije o trenutnom radnom direktoriju, zatim naredbu whoamiprikazuje podatke o korisniku pod kojim ste prijavljeni.

Koristeći ovaj pristup, možete kombinirati koliko god želite naredbi u jednom retku, jedino ograničenje je najveći broj argumenata koji se mogu proslijediti programu. Ovo ograničenje možete definirati pomoću sljedeće naredbe:

getconf ARG_MAX

Naredbeni redak je izvrstan alat, ali u njega morate unositi naredbe svaki put kada vam zatrebaju. Što ako smo napisali skup naredbi u datoteku i jednostavno pozvali tu datoteku da ih izvrši? Zapravo, datoteka o kojoj govorimo zove se skripta naredbenog retka.

Kako rade bash skripte

Stvorite praznu datoteku pomoću naredbe touch. Njegov prvi red mora naznačiti koju ljusku ćemo koristiti. Zanima nas bash, tako da će prvi redak datoteke biti:

#!/bin/bash

Ostali redovi u ovoj datoteci koriste hash simbol za označavanje komentara koje ljuska ne obrađuje. Međutim, prvi red je poseban slučaj, tu je hash nakon kojeg slijedi uskličnik (ovaj niz se zove šajkača) i put do bash, pokazuju sustavu za koji je skripta posebno stvorena bash.

Naredbe ljuske odvojene su povlačenjem retka, komentari su odvojeni znakom hash. Ovako to izgleda:

#!/bin/bash
# This is a comment
pwd
whoami

Ovdje, baš kao iu naredbenom retku, možete pisati naredbe u jednom retku, odvojene točkom i zarezom. Međutim, ako naredbe pišete u različite retke, datoteku je lakše čitati. U svakom slučaju, školjka će ih obraditi.

Postavljanje dopuštenja datoteke skripte

Spremite datoteku dajući joj naziv myscript, a rad na izradi bash skripte je skoro završen. Sada sve što preostaje je napraviti ovu datoteku izvršnom, inače, ako je pokušate pokrenuti, naići ćete na pogrešku Permission denied.

Bash skripte: početak
Pokušaj pokretanja datoteke skripte s netočno konfiguriranim dopuštenjima

Učinimo datoteku izvršnom:

chmod +x ./myscript

Sada pokušajmo to izvršiti:

./myscript

Nakon postavljanja dopuštenja sve radi kako treba.

Bash skripte: početak
Bash skripta je uspješno pokrenuta

Izlaz poruke

Za izlaz teksta na Linux konzolu, koristite naredbu echo. Iskoristimo znanje o ovoj činjenici i uredimo našu skriptu, dodajući objašnjenja podacima koje izlaze naredbe koje su već u njoj:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Ovo se događa nakon pokretanja ažurirane skripte.

Bash skripte: početak
Izlaz poruka iz skripte

Sada pomoću naredbe možemo prikazati bilješke s objašnjenjima echo. Ako ne znate kako urediti datoteku pomoću Linux alata ili niste prije vidjeli naredbu echo, Pogledaj ovo materijal.

Korištenje varijabli

Varijable vam omogućuju pohranjivanje informacija u datoteku skripte, kao što su rezultati naredbi, za korištenje drugim naredbama.

Nema ništa loše u izvršavanju pojedinačnih naredbi bez pohranjivanja njihovih rezultata, ali ovaj je pristup prilično ograničen u svojim mogućnostima.

Postoje dvije vrste varijabli koje se mogu koristiti u bash skriptama:

  • Varijable okruženja
  • Korisničke varijable

Varijable okruženja

Ponekad naredbe ljuske moraju raditi s nekim sistemskim podacima. Evo primjera kako prikazati početni direktorij trenutnog korisnika:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Imajte na umu da možemo koristiti varijablu sustava $HOME u dvostrukim navodnicima, to neće spriječiti sustav da ga prepozna. Ovo ćete dobiti ako pokrenete gornji scenarij.

Bash skripte: početak
Korištenje varijable okoline u skripti

Što ako trebate prikazati znak dolara na ekranu? Pokušajmo ovo:

echo "I have $1 in my pocket"

Sustav će detektirati znak dolara u citiranom nizu i pretpostaviti da smo referencirali varijablu. Skripta će pokušati prikazati vrijednost nedefinirane varijable $1. Ovo nije ono što nam treba. Što uraditi?

U ovoj situaciji pomoći će korištenje znaka za izlaz, obrnute kose crte, prije znaka dolara:

echo "I have $1 in my pocket"

Skripta će sada ispisati točno ono što se očekuje.

Bash skripte: početak
Korištenje izlazne sekvence za ispis znaka dolara

Korisničke varijable

Uz varijable okruženja, bash skripte vam omogućuju definiranje i korištenje vlastitih varijabli u skripti. Takve varijable drže vrijednost sve dok skripta ne završi izvršenje.

Kao i sistemskim varijablama, korisničkim varijablama može se pristupiti pomoću znaka dolara:
TNW-CUS-FMP - promo kod za 10% popusta na naše usluge, dostupan za aktivaciju u roku od 7 dana

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

To se događa nakon pokretanja takve skripte.

Bash skripte: početak
Prilagođene varijable u skripti

Zamjena naredbi

Jedna od najkorisnijih značajki bash skripti je mogućnost izvlačenja informacija iz izlaza naredbe i njihovog dodjeljivanja varijablama, što vam omogućuje korištenje tih informacija bilo gdje u datoteci skripte.

To se može učiniti na dva načina.

  • Korištenje povratne kvačice "`"
  • Po dizajnu $()

Kada koristite prvi pristup, pazite da ne uključite jedan navodnik umjesto kvačice. Naredba mora biti zatvorena u dvije takve ikone:

mydir=`pwd`

U drugom pristupu, ista stvar se piše ovako:

mydir=$(pwd)

A skripta bi na kraju mogla izgledati ovako:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Tijekom svog rada, izlaz naredbe pwdće se spremiti u varijablu mydir, čiji se sadržaj pomoću naredbe echo, otići će na konzolu.

Bash skripte: početak
Skripta koja sprema rezultate naredbe u varijablu

Matematičke operacije

Za izvođenje matematičkih operacija u datoteci skripte, možete koristiti konstrukciju poput $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash skripte: početak
Matematičke operacije u skripti

ako-onda kontrolni konstrukt

U nekim scenarijima morate kontrolirati tijek izvršavanja naredbi. Na primjer, ako je određena vrijednost veća od pet, morate izvršiti jednu radnju, u suprotnom drugu. Ovo je primjenjivo u mnogim situacijama, a tu će nam kontrolna struktura pomoći if-then. U svom najjednostavnijem obliku to izgleda ovako:

if команда
then
команды
fi

Evo primjera rada:

#!/bin/bash
if pwd
then
echo "It works"
fi

U ovom slučaju, ako se naredba izvrši pwduspješno završi, na konzoli će se prikazati tekst "to radi".

Iskoristimo znanje koje imamo i napišimo složeniju skriptu. Recimo da trebamo pronaći određenog korisnika /etc/passwd, a ako ste ga uspjeli pronaći javite da postoji.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Ovo se događa nakon pokretanja ove skripte.

Bash skripte: početak
Pretraga korisnika

Ovdje smo upotrijebili naredbu grepza traženje korisnika u datoteci /etc/passwd. Ako tim grepkoji vam nije poznat, možete pronaći njegov opis здесь.

U ovom primjeru, ako je korisnik pronađen, skripta će prikazati odgovarajuću poruku. Što ako se korisnik ne može pronaći? U ovom slučaju, skripta će jednostavno završiti izvršenje bez da nam išta kaže. Voljeli bismo da nam kaže i za ovo, pa ćemo poboljšati kod.

if-then-else kontrolna konstrukcija

Kako bi program mogao prijaviti i rezultate uspješne pretrage i neuspjeh, koristit ćemo konstrukciju if-then-else. Evo kako to funkcionira:

if команда
then
команды
else
команды
fi

Ako prva naredba vrati nulu, što znači da je uspješno izvršena, uvjet će biti istinit i izvođenje se neće nastaviti duž grane else. Inače, ako se vrati nešto osim nule, što bi značilo neuspjeh ili lažni rezultat, naredbe nakon else.

Napišimo sljedeću skriptu:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Njegovo smaknuće je palo u vodu else.

Bash skripte: početak
Pokretanje skripte s konstrukcijom if-then-else

Pa idemo dalje i zapitajmo se o složenijim uvjetima. Što ako trebate provjeriti ne jedan uvjet, već nekoliko? Na primjer, ako je željeni korisnik pronađen, treba prikazati jednu poruku, ako je ispunjen neki drugi uvjet, treba prikazati drugu poruku i tako dalje. U takvoj situaciji pomoći će nam ugniježđeni uvjeti. Ovako izgleda:

if команда1
then
команды
elif команда2
then
команды
fi

Ako prva naredba vrati nulu, što ukazuje na njezino uspješno izvršenje, naredbe u prvom bloku bit će izvršene then, inače, ako je prvi uvjet lažan i ako druga naredba vrati nulu, izvršit će se drugi blok koda.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

U takvoj skripti možete, primjerice, stvoriti novog korisnika pomoću naredbe useradd, ako pretraga nije dala rezultate, ili učinite nešto drugo korisno.

Usporedba brojeva

U skriptama možete usporediti numeričke vrijednosti. Dolje je popis relevantnih naredbi.

n1 -eq n2Vraća true if n1 je n2.
n1 -ge n2 Vraća true if n1više ili jednako n2.
n1 -gt n2Vraća true if n1 više od n2.
n1 -le n2Vraća true if n1manje ili jednako n2.
n1 -lt n2Vraća true ako je n1 manji od n2.
n1 -ne n2Vraća true if n1nije jednak n2.

Kao primjer, pokušajmo s jednim od operatora za usporedbu. Imajte na umu da je izraz u uglastim zagradama.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

To je ono što će ova naredba ispisati.

Bash skripte: početak
Usporedba brojeva u skriptama

Varijabilna vrijednost val1veći od 5, grananje se završava izvršenjem thenoperator usporedbe i na konzoli se prikazuje odgovarajuća poruka.

Usporedba nizova

Skripte također mogu uspoređivati ​​vrijednosti nizova. Operatori usporedbe izgledaju prilično jednostavno, ali operacije usporedbe nizova imaju određene značajke, kojih ćemo se dotaknuti u nastavku. Ovdje je popis operatera.

str1 = str2 Provjerava jednakost nizova, vraćajući true ako su nizovi identični.
str1 != str2Vraća true ako nizovi nisu identični.
str1 < str2Vraća true if str1manje od str2.
str1 > str2 Vraća true if str1više od str2.
-n str1 Vraća true ako je duljina str1Iznad nule.
-z str1Vraća true ako je duljina str1jednaka nuli.

Evo primjera usporedbe nizova u skripti:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Kao rezultat izvršavanja skripte dobivamo sljedeće.

Bash skripte: početak
Uspoređivanje nizova u skriptama

Evo jedne značajke usporedbe nizova koju vrijedi spomenuti. Naime, operatori ">" i "<" moraju biti označeni obrnutom kosom crtom, inače skripta neće raditi ispravno, iako se neće pojaviti poruke o pogrešci. Skripta tumači znak ">" kao naredbu za preusmjeravanje izlaza.

Evo kako rad s ovim operatorima izgleda u kodu:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Evo rezultata skripte.

Bash skripte: početak
Usporedba nizova, dano upozorenje

Imajte na umu da skripta, iako je izvršena, izdaje upozorenje:

./myscript: line 5: [: too many arguments

Da se riješimo ovog upozorenja, zaključujemo $val2 u dvostrukim navodnicima:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Sada sve radi kako treba.

Bash skripte: početak
Usporedba nizova

Još jedna značajka operatora ">" i "<" je način na koji rade s velikim i malim slovima. Kako bismo razumjeli ovu značajku, pripremimo tekstualnu datoteku sa sljedećim sadržajem:

Likegeeks
likegeeks

Spasimo ga dajući mu ime myfile, zatim pokrenite sljedeću naredbu u terminalu:

sort myfile

Poredat će retke iz datoteke ovako:

likegeeks
Likegeeks

Momčad sort, prema zadanim postavkama, sortira nizove uzlaznim redoslijedom, odnosno malo slovo u našem primjeru je manje od velikog. Sada pripremimo skriptu koja će usporediti iste nizove:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ako ga pokrenete, ispada da je sve obrnuto - malo slovo je sada veće od velikog.

Bash skripte: početak
Naredba sortiranja i usporedba nizova u datoteci skripte

U naredbama za usporedbu, velika su slova manja od malih slova. Usporedba nizova ovdje se vrši usporedbom ASCII kodova znakova, stoga redoslijed sortiranja ovisi o kodovima znakova.

Momčad sort, pak, koristi redoslijed sortiranja naveden u postavkama jezika sustava.

Provjere datoteka

Možda se sljedeće naredbe najčešće koriste u bash skriptama. Omogućuju vam da provjerite različite uvjete u vezi s datotekama. Ovdje je popis ovih naredbi.

-d fileProvjerava postoji li datoteka i je li direktorij.
-e fileProvjerava postoji li datoteka.
-f file Provjerava postoji li datoteka i je li datoteka.
-r fileProvjerava postoji li datoteka i je li čitljiva.
-s file ПProvjerava postoji li datoteka i nije li prazna.
-w fileProvjerava postoji li datoteka i može li se pisati.
-x fileProvjerava postoji li datoteka i je li izvršna.
file1 -nt file2 Provjerava da li je novije file1od file2.
file1 -ot file2Provjerava je li starija file1od file2.
-O file Provjerava da li datoteka postoji i da li je u vlasništvu trenutnog korisnika.
-G fileProvjerava postoji li datoteka i podudara li se ID njezine grupe s ID-om grupe trenutnog korisnika.

Ove naredbe, kao i mnoge druge o kojima se danas raspravlja, lako se pamte. Njihova imena, kao kratice različitih riječi, izravno ukazuju na provjere koje obavljaju.

Isprobajmo jednu od naredbi u praksi:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Ova skripta, za postojeći imenik, prikazat će njegov sadržaj.

Bash skripte: početak
Ispisivanje sadržaja imenika

Vjerujemo da s preostalim naredbama možete sami eksperimentirati, sve se koriste po istom principu.

Rezultati

Danas smo razgovarali o tome kako početi pisati bash skripte i pokrili neke osnovne stvari. Zapravo, tema bash programiranja je ogromna. Ovaj članak je prijevod prvog dijela velike serije od 11 materijala. Ako želite nastaviti odmah, ovdje je popis izvornika ovih materijala. Radi praktičnosti, ovdje je uključen prijevod koji ste upravo pročitali.

  1. Bash skripta korak po korak — ovdje se govori o tome kako započeti kreirati bash skripte, razmatra se upotreba varijabli, opisuju se uvjetne strukture, izračuni, usporedbe brojeva, nizova i pronalaženje informacija o datotekama.
  2. Bash Scripting Part 2, Bash the awesome — ovdje se otkrivaju značajke rada s for i while petljama.
  3. Bash skriptiranje, dio 3, parametri i opcije — ovaj materijal posvećen je parametrima naredbenog retka i ključevima koji se mogu proslijediti skriptama, radeći s podacima koje korisnik unosi i koji se mogu čitati iz datoteka.
  4. Bash skriptiranje, 4. dio, Ulaz i izlaz - ovdje govorimo o deskriptorima datoteka i radu s njima, o ulazu, izlazu, tokovima grešaka i o preusmjeravanju izlaza.
  5. Bash skriptiranje, dio 5, Sighals & Jobs — ovaj materijal posvećen je Linux signalima, njihovoj obradi u skriptama i pokretanju skripti prema rasporedu.
  6. Bash skriptiranje, 6. dio, Funkcije — ovdje možete naučiti o stvaranju i korištenju funkcija u skriptama i razvoju knjižnica.
  7. Bash skriptiranje, dio 7, korištenje sed-a — ovaj je članak posvećen radu s uređivačem teksta za strujanje sed.
  8. Bash skriptiranje, dio 8, korištenje awk-a — ovaj materijal je posvećen programiranju u jeziku za obradu podataka awk.
  9. Bash skriptiranje, dio 9, Regularni izrazi — ovdje možete pročitati o korištenju regularnih izraza u bash skriptama.
  10. Bash skriptiranje, dio 10, praktični primjeri — ovdje su tehnike za rad s porukama koje se mogu poslati korisnicima, kao i metoda za nadzor diska.
  11. Bash skriptiranje, dio 11, naredba Expect — ovaj materijal posvećen je alatu Expect, s kojim možete automatizirati interakciju s interaktivnim uslužnim programima. Konkretno, govorimo o očekivanim skriptama i njihovoj interakciji s bash skriptama i drugim programima.

Vjerujemo da je jedna od vrijednih značajki ove serije članaka to što, počevši od najjednostavnijeg, prikladnog za korisnike bilo koje razine, postupno vodi do vrlo ozbiljnih tema, dajući svima priliku za napredovanje u stvaranju skripti naredbenog retka za Linux .

Poštovani čitatelji! Molimo gurue bash programiranja da govore o tome kako su dosegli vrhunac svog majstorstva, podijele svoje tajne i veselimo se dojmovima onih koji su upravo napisali svoju prvu skriptu.

Bash skripte: početak

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Trebam li prevesti ostatak serije članaka?

  • Da!

  • Ne, nema potrebe

Glasovalo je 1030 korisnika. Suzdržano je bilo 106 korisnika.

Izvor: www.habr.com

Dodajte komentar