Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • OS
  • Upravljanje ubuntu-om kroz skriptu u windowsu. Kreiranje i pokretanje skripte

Upravljanje ubuntu-om kroz skriptu u windowsu. Kreiranje i pokretanje skripte

Prije svega, hajde da shvatimo šta je to script i zašto je to potrebno.

Skripta prevedeno sa engleskog - scenario. Svi gledamo filmove, mnogi od nas gledaju predstave. Da bi kreirali film/predstavu, scenaristi za njih pišu scenarije, na osnovu kojih glumci izvode svoje uloge na sceni, scenu po scenu, od koje je film/predstava napravljena. Posao izrade scenarija je prilično mukotrpan, gdje treba uzeti u obzir sve do najsitnijeg detalja, kako bi umjetnici na kraju ispunili ono što je scenarista naumio, a gledalac mogao vidjeti kompletan rad.

Slično, skripte se pišu da izvrše listu zadataka koje korisnik sastavlja (kod) kako bi ih lakše i brže izvršili na operativnom sistemu. Za pisanje jednostavnih skripti uopće nije potrebno imati obrazovanje programera.

Prvo, napravimo najjednostavniji script-Shell da ažurirate sistem.

Sve radnje ću izvršiti sa sistemom Ubuntu, ali su primjenjivi i na druge sisteme Linux, izvedeno iz Ubuntu. Za ovo nam je potrebno: Uređivač teksta da ga ispunite potrebnim zadacima za kreiranje skripte (koda) i Terminal- da izvršite kreiranu skriptu. Ovi alati su instalirani u bilo kojoj distribuciji Linux default.

Dakle, otvorite uređivač teksta Gedit i u njega unesite prve tražene znakove shebang.
shebang u programiranju, ovo je niz od dva znaka: hash i znak uzvika ( #! ) na početku datoteke skripte. I dodajte ovim znakovima bez razmaka /bin/sh- interpreter u kojem će se skripta izvršavati. /bin/sh- Ovo je obično Bourne shell ili kompatibilan interpreter komandne linije koji prolazi "put/do/skripta" kao prvi parametar.
Prva obavezna linija skripte će izgledati ovako:

# Moja prva skripta za ažuriranje Ubuntua

Heš znak (#) na samom početku reda jasno stavlja do znanja interpretatoru/terminalu da ovaj red ne treba čitati i izvršavati. Red je potreban u kodu ove skripte kako bi kreator skripte znao šta će uraditi u ovom segmentu/sceni u kodu, kako se ne bi zbunili u budućnosti kada takvih redova bude mnogo. Takve linije sa heš znakom nazivaju se - prokomentarisao .

sudo apt update
sudo apt nadogradnja -y

-y na kraju druge naredbe tumači/terminalu jasno daje do znanja da se ova radnja/komanda mora izvršiti automatski, bez dodatne potvrde korisnika pritiskom na tipku Enter. y- skraćenica za engleski da, tj. Da.

To je sve. Vaša prva skripta je kreirana. Trebalo bi da dobijete nešto poput slike:


Ostaje samo da sačuvate kreiranu datoteku/skriptu i date je Ime sa obaveznim produžetkom na kraju - .sh. Produžetak .sh dodijeljen izvršnoj datoteci.
Dao sam mu Ime - update.sh, ušteda u Početna fascikla korisnik:


Da bi kreirana datoteka/skripta bila izvršna, mora mu se dati dozvola za to. Postoje dva načina da to uradite.

1. Pokrenite sljedeću naredbu u terminalu:

sudo chmod +x update.sh

2. Ili otvorite upravitelj datoteka Početna fascikla(gde ste sačuvali kreiranu skriptu), kliknite desnim tasterom miša na datoteku, u kontekstualnom meniju - Svojstva - Prava i aktiviraj stavku - Performanse: Dozvolite da se datoteka izvršava kao program:


Da biste izvršili kreiranu skriptu, potrebno je da otvorite terminal (kao što sam napisao na samom početku članka da je terminal neophodan atribut/alat za izvršavanje skripte), unesite sh, odvojeno razmakom ime skripte - update.sh i pritisnite tipku Enter:


Ili u terminal koji ulazimo sh i prevucite kreiranu datoteku sa skriptom iz upravitelja datoteka (takođe odvojeno razmakom):


Nakon što se nakon naredbe prikaže putanja datoteke sh i razmak, samo pritisnite tipku Enter(Enter) da izvršite ažuriranje sistema:


Sada u svakom trenutku možete ažurirati sistem koristeći vlastitu skriptu.

Da, neko bi mogao da tvrdi da ažuriranje sistema nije teško izvršiti izvršavanjem ove dve komande u terminalu, zašto se naduvavati i kreirati neke skripte? Tako je. Ali ovo je primjer kreiranja jednostavnog scenarija koji pokazuje da "nisu bogovi ti koji spaljuju lonce" 😃.

Nakon što ste naučili da pišete i koristite jednostavne skripte, možete kreirati skriptu za podešavanje sistema, tako da ako se sistem ponovo instalira, možete koristiti kreiranu skriptu bez potrebe da svaki put tražite sajtove sa sličnim postavkama na Internetu.

Mnogi od vas najvjerovatnije koriste stranice za postavljanje sistema, poput onih koje objavljujem nakon sljedećeg izdanja. Ubuntu - Ubuntu nakon instalacije ili slične stranice. Otvorite jednu od ovih lokacija: , zatim uređivač teksta da kreirate skriptu.
Na primjer, napravio sam sljedeće prazno.

U uređivaču teksta unesite prvi obavezni red:

# Postavljanje Ubuntua nakon instalacije
# Ažuriranje sistema

Ovo su naredbe za ažuriranje sistema:

sudo apt update
sudo apt nadogradnja -y

Red opisa: Dodavanje spremišta:

# Dodavanje spremišta

I dodajte potrebna spremišta za dalju instalaciju softvera:

sudo add-apt-repository "deb http://archive.canonical.com/ $(lsb_release -sc) partner" -y
sudo add-apt-repository ppa:atareao/telegram -y
sudo add-apt-repository ppa:atareao/atareao -y

sudo add-apt-repository ppa:nemh/systemback -y
sudo add-apt-repository ppa:gerardpuig/ppa -y
sudo add-apt-repository ppa:haecker-felix/gradio-daily -y

Nakon što se dodaju potrebna spremišta (ponavljam, možda imate svoja spremišta, imam primjer), potrebno je ažurirati sistem:

Red opisa:

# Ažuriranje sistema nakon povezivanja spremišta

I naredba za izvršenje:

sudo apt update

Sada kada su spremišta dodana i sistem ažuriran, vrijeme je za instaliranje programa:

# Instaliranje programa

Da biste instalirali programe, samo jednom unesite naredbu sudo apt install, a zatim dodajte koliko god programa želite u ovaj red, odvojenih razmakom, glavna stvar je da su pravilno sastavljeni. Ako se program sastoji od više riječi, njegova komanda mora biti monolitna, tj. sve riječi u njemu moraju se unijeti kroz crticu, na primjer: alat za podešavanje jedinstva:

sudo apt install my-weather-indicator telegram skype lm-sensors hddtemp psensor gdebi systemback unity-tweak-tool ubuntu-cleaner gradio -y

Instaliranje dodatnih kodeka

# Multimedija i kodeci

sudo apt install ubuntu-restricted-extras -y

Onemogućavanje grešaka sistema

# Onemogućite izvještavanje o padu sistema

sudo sed -i "s/enabled=1/enabled=0/g" "/etc/default/apport"

Pa, to je vjerovatno sve. Ova generirana datoteka skripte bi trebala izgledati ovako:


Morate ga sačuvati (kliknite na dugme Sačuvaj) i dati Ime sa produžetkom .sh. Zvao sam ga Postavke\Ubuntu.sh(možete ga imenovati drugačije, ali svakako koristite ekstenziju .sh):


Učinimo kreiranu skriptu izvršnom:

sudo chmod +x Setup\Ubuntu.sh

Da biste izvršili kreiranu skriptu, uđite u terminal sh i naziv kreirane skripte odvojen razmakom, ili sh, razmaknicu i prevucite kreiranu datoteku u terminal, kao što je ranije objašnjeno u najjednostavnijoj skripti i pritisnite tipku Enter, da to izvrši.

Bilješka. Obrnuta kosa crta u komandi Postavke\Ubuntu.sh izbjegava razmak u nazivu terminalske datoteke između dvije odvojene riječi.

Nakon što se skripta izvrši, pohraniti je za budućnost, za moguću ponovnu instalaciju sistema i rekonfiguraciju, najbolje na zasebnoj particiji tvrdog diska u folderu /Dom. Ako ga nema, onda u cloud servisu (pohrana podataka u oblaku) kao: DropBox, Cloud Mail.Ru, Mega.co itd., tako da sami možete koristiti skriptu u bilo koje vrijeme, ili pomoći prijateljima ili rođacima da postave sistem.

Danas ćemo pričati o bash skriptama. Ovo su skripte komandne linije napisane za bash shell. Postoje i druge ljuske, na primjer - zsh, tcsh, ksh, ali ćemo se fokusirati na bash. Ovaj materijal je namijenjen svima, jedini uvjet je mogućnost rada na Linux komandnoj liniji.



Skripte komandne linije su kolekcije istih komandi koje se mogu unositi sa tastature, skupljati u fajlove i objediniti nekom zajedničkom svrhom. U ovom slučaju, rezultati rada timova mogu biti ili nezavisne vrijednosti ili poslužiti kao ulazni podaci za druge timove. Skripte su moćan način za automatizaciju često izvođenih radnji.

Dakle, ako govorimo o komandnoj liniji, ona vam omogućava da izvršite nekoliko naredbi odjednom tako što ćete ih uneti odvojene tačkom i zarezom:

Pwd; ko sam ja
U stvari, ako ste ovo probali u svom terminalu, vaša prva bash skripta koja uključuje dvije komande je već napisana. Radi ovako. Prvo, naredba pwd prikazuje informacije o trenutnom radnom direktoriju, a zatim whoami komanda prikazuje informacije o korisniku pod kojim ste prijavljeni.

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

Getconf ARG_MAX
Komandna linija je odličan alat, ali morate unijeti komande u nju svaki put kada vam zatrebaju. Šta ako zapišemo skup naredbi u datoteku i jednostavno pozovemo tu datoteku da ih izvršimo? U stvari, datoteka o kojoj govorimo zove se skripta komandne linije.

Kako funkcionišu bash skripte

Kreirajte praznu datoteku koristeći dodirnu komandu. Njegov prvi red treba da naznači koju ljusku ćemo koristiti. Zanima nas bash, tako da će prvi red fajla biti ovakav:

#!/bin/bash
Drugi redovi u ovoj datoteci koriste heš simbol da naznače komentare koje ljuska ne obrađuje. Međutim, prvi red je poseban slučaj, gde heš praćen znakom uzvika (ova sekvenca se zove shebang) i putanja do bash ukazuju sistemu da je skripta kreirana posebno za bash.

Shell komande su odvojene linijom, komentari su odvojeni znakom heša. Ovako to izgleda:

#!/bin/bash # Ovo je komentar pwd whoami
Ovdje, baš kao i na komandnoj liniji, možete pisati komande u jednom redu, odvojene tačkom i zarezom. Međutim, ako pišete komande u različitim redovima, fajl je lakše čitati. U svakom slučaju, školjka će ih obraditi.

Postavljanje dozvola za fajlove skripte

Sačuvajte datoteku i nazovite je myscript i skoro ste gotovi sa kreiranjem bash skripte. Sada sve što preostaje je da ovu datoteku učinite izvršnom, u suprotnom, ako pokušate da je pokrenete, naići ćete na grešku Permission denied.


Pokušaj pokretanja datoteke skripte s pogrešno konfiguriranim dozvolama

Učinimo datoteku izvršnom:

Chmod +x ./myscript
Sada pokušajmo da ga izvršimo:

./myscript
Nakon postavljanja dozvola sve radi kako treba.


Uspješno pokretanje bash skripte

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 komande koje se već nalaze u njoj:

#!/bin/bash # naš komentar je ovdje echo "Trenutni direktorij je:" pwd echo "Korisnik prijavljen je:" whoami
Ovo se dešava nakon pokretanja ažurirane skripte.


Izlaz poruka iz skripte

Sada možemo prikazati objašnjenja koristeći komandu echo. Ako ne znate kako urediti datoteku pomoću Linux alata ili se ranije niste susreli s komandom echo, pogledajte ovaj resurs.

Korištenje varijabli

Varijable vam omogućavaju 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 pristup je 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 komande ljuske moraju da rade sa nekim sistemskim podacima. Evo primjera kako prikazati kućni direktorij trenutnog korisnika:

#!/bin/bash # display user home echo "Dom za trenutnog korisnika je: $HOME"
Imajte na umu da sistemsku varijablu $HOME možemo koristiti u dvostrukim navodnicima, što neće spriječiti sistem da je prepozna. Ovo ćete dobiti ako pokrenete gornji scenario.


Korištenje varijable okruženja u skripti

Šta ako trebate prikazati znak dolara na ekranu? Hajde da probamo ovo:

Eho "Imam 1 dolar u džepu"
Sistem će otkriti 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. sta da radim?

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

Eho "Imam \$1 u džepu"
Skripta će sada ispisati tačno ono što se očekuje.


Korištenje escape sekvence za ispis znaka dolara

Korisničke varijable

Pored varijabli okruženja, bash skripte vam omogućavaju da definirate i koristite vlastite varijable u skripti. Takve varijable drže vrijednost sve dok skripta ne završi izvršenje.

Kao i kod sistemskih varijabli, korisničkim varijablama se može 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 # testiranje varijabli grade=5 person="Adam" echo "$osoba je dobar dečko, on je u razredu $grade"
Ovo se dešava nakon pokretanja takve skripte.


Prilagođene varijable u skripti

Zamjena komandi

Jedna od najkorisnijih karakteristika bash skripti je mogućnost izdvajanja informacija iz izlaza komande i dodeljivanja ih varijablama, omogućavajući da se te informacije koriste bilo gde u datoteci skripte.

Postoje dva načina da to uradite.

  • Korištenje pozadine "`"
  • Koristeći $() konstrukciju
Kada koristite prvi pristup, pazite da ne uključite ni jedan navodnik umjesto kvačice. Naredba mora biti zatvorena u dvije takve ikone:

Mydir=`pwd`
U drugom pristupu, ista stvar je napisana ovako:

Mydir=$(pwd)
A skripta bi na kraju mogla izgledati ovako:

#!/bin/bash mydir=$(pwd) echo $mydir
Tokom rada, izlaz naredbe pwd će biti pohranjen u varijablu mydir, čiji će sadržaj, korištenjem naredbe echo, biti poslan na konzolu.


Skripta koja sprema rezultate naredbe u varijablu

Matematičke operacije

Da biste izvršili matematičke operacije u datoteci skripte, možete koristiti konstrukciju poput $((a+b)):

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


Matematičke operacije u skripti

ako-onda kontrolna konstrukcija

U nekim scenarijima morate kontrolirati tok izvršenja naredbe. 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 ovdje će nam pomoći kontrolna konstrukcija ako-onda. U svom najjednostavnijem obliku to izgleda ovako:

Ako komanduje onda fi komande
Evo radnog primjera:

#!/bin/bash ako pwd onda echo "Radi" fi
U ovom slučaju, ako se naredba pwd uspješno završi, tekst "to radi" će biti ispisan na konzoli.

Iskoristimo znanje koje imamo i napišimo složeniji skript. Recimo da treba da pronađemo određenog korisnika u /etc/passwd, i ako smo uspeli da ga pronađemo, prijavimo da postoji.

#!/bin/bash user=likegeeks ako grep $user /etc/passwd onda echo "Korisnik $user postoji" fi
Ovo se dešava nakon pokretanja ove skripte.


Potražite korisnika

Ovdje smo koristili naredbu grep za traženje korisnika u /etc/passwd datoteci. Ako vam naredba grep nije poznata, možete pronaći njen opis.

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

ako-onda-drugo kontrolna konstrukcija

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

If command then commands else komande fi
Ako prva naredba vrati nulu, što znači da je uspješno izvršena, uvjet će biti istinit i izvršenje se neće nastaviti duž druge grane. U suprotnom, ako se vrati nešto drugo osim nule, što bi ukazivalo na neuspjeh ili lažan rezultat, naredbe iza else će se izvršiti.

Hajde da napišemo sledeću skriptu:

#!/bin/bash user=anotherUser ako grep $user /etc/passwd onda echo "Korisnik $user postoji" inače echo "Korisnik $user ne postoji" fi
Njegovo izvršenje išlo je duž druge grane.


Pokretanje skripte sa konstrukcijom if-then-else

Pa, idemo dalje i zapitamo se o složenijim uslovima. Što ako trebate provjeriti ne jedan uslov, već nekoliko? Na primjer, ako se pronađe željeni korisnik, treba se prikazati jedna poruka, ako je ispunjen neki drugi uvjet, druga poruka i tako dalje. U takvoj situaciji će nam pomoći ugniježđeni uslovi. izgleda ovako:

Ako komanda1 onda komanduje elif komanda2 onda komande fi
Ako prva naredba vrati nulu, što ukazuje na uspjeh, izvršit će se naredbe u prvom bloku then, u suprotnom, ako je prvi uvjet netačan, a ako druga naredba vrati nulu, izvršit će se drugi blok koda.

#!/bin/bash user=anotherUser if grep $user /etc/passwd onda echo "Korisnik $user postoji" elif ls /home onda echo "Korisnik ne postoji, ali svejedno postoji direktorij pod /home" fi
U takvoj skripti možete, na primjer, kreirati novog korisnika koristeći naredbu useradd ako pretraga ne daje rezultate ili učiniti nešto drugo korisno.

Poređenje brojeva

U skriptama možete upoređivati ​​numeričke vrijednosti. Ispod je lista relevantnih komandi.
n1 -eq n2 Vraća istinito ako je n1 jednako n2.
n1 -ge n2 Vraća istinito ako je n1 veće ili jednako n2.
n1 -gt n2 Vraća istinito ako je n1 veće od n2.
n1 -le n2 Vraća istinito ako je n1 manje ili jednako n2.
n1 -lt n2 Vraća istinito ako je n1 manje od n2.
n1 -ne n2 Vraća tačno ako n1 nije jednako n2.

Kao primjer, pokušajmo s jednim od operatora poređenja. Imajte na umu da je izraz zatvoren u uglastim zagradama.

#!/bin/bash val1=6 if [ $val1 -gt 5 ] then echo "Test vrijednost $val1 je veća od 5" inače echo "Test vrijednost $val1 nije veća od 5" fi
Ovo je ono što će ova komanda proizvesti.


Poređenje brojeva u skriptama

Vrijednost varijable val1 je veća od 5, kao rezultat toga se izvršava grana tada operatora poređenja i odgovarajuća poruka se prikazuje u konzoli.

Poređenje nizova

Skripte također mogu upoređivati ​​vrijednosti nizova. Operatori poređenja izgledaju prilično jednostavno, ali operacije poređenja nizova imaju određene karakteristike, kojih ćemo se dotaknuti u nastavku. Evo liste operatera.
str1 = str2 Testira stringove na jednakost, vraćajući true ako su stringovi identični.
s tr1 != str2 Vraća true ako stringovi nisu identični.
str1< str2 Возвращает истину, если str1 меньше, чем str2 .
str1 > str2 Vraća true ako je str1 veći od str2.
-n str1 Vraća tačno ako je dužina str1 veća od nule.
-z str1 Vraća tačno ako je dužina str1 nula.

Evo primjera poređenja nizova u skripti:

#!/bin/bash korisnik ="likegeeks" if [$user = $USER] then echo "Korisnik $user je trenutno prijavljen korisnik" fi
Kao rezultat izvršavanja skripte, dobijamo sljedeće.


Poređenje stringova u skriptama

Evo jedne karakteristike poređenja stringova koja je vrijedna spomena. Naime, operatori ">" i "<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>» kao naredba za preusmjeravanje izlaza.

Evo kako rad sa ovim operatorima izgleda u kodu:

#!/bin/bash val1=text val2="drugi tekst" ako [ $val1 \>
Evo rezultata skripte.


Poređenje nizova, dato upozorenje

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

./myscript: red 5: [: previše argumenata
Da bismo se riješili ovog upozorenja, stavljamo $val2 u dvostruke navodnike:

#!/bin/bash val1=text val2="drugi tekst" ako [ $val1 \> "$val2" ] onda echo "$val1 je veći od $val2" inače echo "$val1 je manji od $val2" fi
Sada sve radi kako treba.


Poređenje nizova

Još jedna karakteristika operatora “>” i “<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:

Likegeeks likegeeks
Sačuvajmo ga, dajući mu ime myfile , a zatim pokrenite sljedeću naredbu u terminalu:

Sortiraj moj fajl
On će sortirati redove iz fajla ovako:

Likegeeks Likegeeks
Naredba sort, po defaultu, sortira nizove uzlaznim redoslijedom, odnosno, malo slovo u našem primjeru je manje od velikog. Sada pripremimo skriptu koja će upoređivati ​​iste nizove:

#!/bin/bash val1=Likegeeks val2=likegeeks ako [ $val1 \> $val2 ] onda echo "$val1 je veći od $val2" inače echo "$val1 je manji od $val2" fi
Ako ga pokrenete, ispostaviće se da je sve obrnuto - malo slovo je sada veće od velikog.


Komanda sortiranja i poređenje stringova u datoteci skripte

U naredbama za poređenje, velika slova su manja od malih slova. Poređenje nizova ovdje se vrši poređenjem ASCII kodova znakova, tako da redoslijed sortiranja ovisi o kodovima znakova.

Komanda sortiranja, zauzvrat, koristi redoslijed sortiranja naveden u postavkama jezika sistema.

Provjere datoteka

Možda se sljedeće komande najčešće koriste u bash skriptama. Oni vam omogućavaju da provjerite različite uvjete u vezi s datotekama. Evo liste ovih naredbi.
-d datoteka Provjerava da li datoteka postoji i da li je direktorij.
-e datoteka Provjerava da li datoteka postoji.
-f datoteka Provjerava da li datoteka postoji i da li je datoteka.
-r datoteka Provjerava da li datoteka postoji i da li je čitljiva.
-s datoteka Provjerava da li datoteka postoji i nije li prazna.
-w datoteka Provjerava da li datoteka postoji i da li je moguće pisati.
-x datoteka Provjerava da li datoteka postoji i da li je izvršna.
file1 -nt file2 Provjerava da li je fajl1 noviji od fajla2.
file1 -ot file2 Provjerava da li je fajl1 stariji od fajla2.
-O datoteka Provjerava da li datoteka postoji i da li je u vlasništvu trenutnog korisnika.
-G datoteka Provjerava da li datoteka postoji i da li njen ID grupe odgovara ID-u grupe trenutnog korisnika.

Ove komande, kao i mnoge druge o kojima se danas raspravlja, lako se pamte. Njihova imena, kao skraćenice različitih riječi, direktno ukazuju na provjere koje obavljaju.

Isprobajmo jednu od naredbi u praksi:

#!/bin/bash mydir=/home/likegeeks if [ -d $mydir ] then echo "Direktorij $mydir postoji" cd $ mydir ls else echo "Direktorij $mydir ne postoji" fi
Ova skripta, za postojeći direktorij, će prikazati njegov sadržaj.


Ispisivanje sadržaja direktorija

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

Rezultati

Danas smo razgovarali o tome kako započeti pisanje bash skripti i pokrili neke osnovne stvari. U stvari, tema bash programiranja je ogromna. Ovaj članak je prijevod prvog dijela velike serije od 11 materijala. Ako želite da nastavite odmah, evo liste originala ovih materijala. Radi praktičnosti, ovdje je uključen prijevod koji ste upravo pročitali.

Danas ćemo pričati o bash skriptama. Ovo su skripte komandne linije napisane za bash shell. Postoje i druge ljuske, na primjer - zsh, tcsh, ksh, ali ćemo se fokusirati na bash. Ovaj materijal je namijenjen svima, jedini uvjet je mogućnost rada na Linux komandnoj liniji.



Skripte komandne linije su kolekcije istih komandi koje se mogu unositi sa tastature, skupljati u fajlove i objediniti nekom zajedničkom svrhom. U ovom slučaju, rezultati rada timova mogu biti ili nezavisne vrijednosti ili poslužiti kao ulazni podaci za druge timove. Skripte su moćan način za automatizaciju često izvođenih radnji.

Dakle, ako govorimo o komandnoj liniji, ona vam omogućava da izvršite nekoliko naredbi odjednom tako što ćete ih uneti odvojene tačkom i zarezom:

Pwd; ko sam ja
U stvari, ako ste ovo probali u svom terminalu, vaša prva bash skripta koja uključuje dvije komande je već napisana. Radi ovako. Prvo, naredba pwd prikazuje informacije o trenutnom radnom direktoriju, a zatim whoami komanda prikazuje informacije o korisniku pod kojim ste prijavljeni.

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

Getconf ARG_MAX
Komandna linija je odličan alat, ali morate unijeti komande u nju svaki put kada vam zatrebaju. Šta ako zapišemo skup naredbi u datoteku i jednostavno pozovemo tu datoteku da ih izvršimo? U stvari, datoteka o kojoj govorimo zove se skripta komandne linije.

Kako funkcionišu bash skripte

Kreirajte praznu datoteku koristeći dodirnu komandu. Njegov prvi red treba da naznači koju ljusku ćemo koristiti. Zanima nas bash, tako da će prvi red fajla biti ovakav:

#!/bin/bash
Drugi redovi u ovoj datoteci koriste heš simbol da naznače komentare koje ljuska ne obrađuje. Međutim, prvi red je poseban slučaj, gde heš praćen znakom uzvika (ova sekvenca se zove shebang) i putanja do bash ukazuju sistemu da je skripta kreirana posebno za bash.

Shell komande su odvojene linijom, komentari su odvojeni znakom heša. Ovako to izgleda:

#!/bin/bash # Ovo je komentar pwd whoami
Ovdje, baš kao i na komandnoj liniji, možete pisati komande u jednom redu, odvojene tačkom i zarezom. Međutim, ako pišete komande u različitim redovima, fajl je lakše čitati. U svakom slučaju, školjka će ih obraditi.

Postavljanje dozvola za fajlove skripte

Sačuvajte datoteku i nazovite je myscript i skoro ste gotovi sa kreiranjem bash skripte. Sada sve što preostaje je da ovu datoteku učinite izvršnom, u suprotnom, ako pokušate da je pokrenete, naići ćete na grešku Permission denied.


Pokušaj pokretanja datoteke skripte s pogrešno konfiguriranim dozvolama

Učinimo datoteku izvršnom:

Chmod +x ./myscript
Sada pokušajmo da ga izvršimo:

./myscript
Nakon postavljanja dozvola sve radi kako treba.


Uspješno pokretanje bash skripte

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 komande koje se već nalaze u njoj:

#!/bin/bash # naš komentar je ovdje echo "Trenutni direktorij je:" pwd echo "Korisnik prijavljen je:" whoami
Ovo se dešava nakon pokretanja ažurirane skripte.


Izlaz poruka iz skripte

Sada možemo prikazati objašnjenja koristeći komandu echo. Ako ne znate kako urediti datoteku pomoću Linux alata ili se ranije niste susreli s komandom echo, pogledajte ovaj resurs.

Korištenje varijabli

Varijable vam omogućavaju 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 pristup je 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 komande ljuske moraju da rade sa nekim sistemskim podacima. Evo primjera kako prikazati kućni direktorij trenutnog korisnika:

#!/bin/bash # display user home echo "Dom za trenutnog korisnika je: $HOME"
Imajte na umu da sistemsku varijablu $HOME možemo koristiti u dvostrukim navodnicima, što neće spriječiti sistem da je prepozna. Ovo ćete dobiti ako pokrenete gornji scenario.


Korištenje varijable okruženja u skripti

Šta ako trebate prikazati znak dolara na ekranu? Hajde da probamo ovo:

Eho "Imam 1 dolar u džepu"
Sistem će otkriti 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. sta da radim?

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

Eho "Imam \$1 u džepu"
Skripta će sada ispisati tačno ono što se očekuje.


Korištenje escape sekvence za ispis znaka dolara

Korisničke varijable

Pored varijabli okruženja, bash skripte vam omogućavaju da definirate i koristite vlastite varijable u skripti. Takve varijable drže vrijednost sve dok skripta ne završi izvršenje.

Kao i kod sistemskih varijabli, korisničkim varijablama se može 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 # testiranje varijabli grade=5 person="Adam" echo "$osoba je dobar dečko, on je u razredu $grade"
Ovo se dešava nakon pokretanja takve skripte.


Prilagođene varijable u skripti

Zamjena komandi

Jedna od najkorisnijih karakteristika bash skripti je mogućnost izdvajanja informacija iz izlaza komande i dodeljivanja ih varijablama, omogućavajući da se te informacije koriste bilo gde u datoteci skripte.

Postoje dva načina da to uradite.

  • Korištenje pozadine "`"
  • Koristeći $() konstrukciju
Kada koristite prvi pristup, pazite da ne uključite ni jedan navodnik umjesto kvačice. Naredba mora biti zatvorena u dvije takve ikone:

Mydir=`pwd`
U drugom pristupu, ista stvar je napisana ovako:

Mydir=$(pwd)
A skripta bi na kraju mogla izgledati ovako:

#!/bin/bash mydir=$(pwd) echo $mydir
Tokom rada, izlaz naredbe pwd će biti pohranjen u varijablu mydir, čiji će sadržaj, korištenjem naredbe echo, biti poslan na konzolu.


Skripta koja sprema rezultate naredbe u varijablu

Matematičke operacije

Da biste izvršili matematičke operacije u datoteci skripte, možete koristiti konstrukciju poput $((a+b)):

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


Matematičke operacije u skripti

ako-onda kontrolna konstrukcija

U nekim scenarijima morate kontrolirati tok izvršenja naredbe. 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 ovdje će nam pomoći kontrolna konstrukcija ako-onda. U svom najjednostavnijem obliku to izgleda ovako:

Ako komanduje onda fi komande
Evo radnog primjera:

#!/bin/bash ako pwd onda echo "Radi" fi
U ovom slučaju, ako se naredba pwd uspješno završi, tekst "to radi" će biti ispisan na konzoli.

Iskoristimo znanje koje imamo i napišimo složeniji skript. Recimo da treba da pronađemo određenog korisnika u /etc/passwd, i ako smo uspeli da ga pronađemo, prijavimo da postoji.

#!/bin/bash user=likegeeks ako grep $user /etc/passwd onda echo "Korisnik $user postoji" fi
Ovo se dešava nakon pokretanja ove skripte.


Potražite korisnika

Ovdje smo koristili naredbu grep za traženje korisnika u /etc/passwd datoteci. Ako vam naredba grep nije poznata, možete pronaći njen opis.

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

ako-onda-drugo kontrolna konstrukcija

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

If command then commands else komande fi
Ako prva naredba vrati nulu, što znači da je uspješno izvršena, uvjet će biti istinit i izvršenje se neće nastaviti duž druge grane. U suprotnom, ako se vrati nešto drugo osim nule, što bi ukazivalo na neuspjeh ili lažan rezultat, naredbe iza else će se izvršiti.

Hajde da napišemo sledeću skriptu:

#!/bin/bash user=anotherUser ako grep $user /etc/passwd onda echo "Korisnik $user postoji" inače echo "Korisnik $user ne postoji" fi
Njegovo izvršenje išlo je duž druge grane.


Pokretanje skripte sa konstrukcijom if-then-else

Pa, idemo dalje i zapitamo se o složenijim uslovima. Što ako trebate provjeriti ne jedan uslov, već nekoliko? Na primjer, ako se pronađe željeni korisnik, treba se prikazati jedna poruka, ako je ispunjen neki drugi uvjet, druga poruka i tako dalje. U takvoj situaciji će nam pomoći ugniježđeni uslovi. izgleda ovako:

Ako komanda1 onda komanduje elif komanda2 onda komande fi
Ako prva naredba vrati nulu, što ukazuje na uspjeh, izvršit će se naredbe u prvom bloku then, u suprotnom, ako je prvi uvjet netačan, a ako druga naredba vrati nulu, izvršit će se drugi blok koda.

#!/bin/bash user=anotherUser if grep $user /etc/passwd onda echo "Korisnik $user postoji" elif ls /home onda echo "Korisnik ne postoji, ali svejedno postoji direktorij pod /home" fi
U takvoj skripti možete, na primjer, kreirati novog korisnika koristeći naredbu useradd ako pretraga ne daje rezultate ili učiniti nešto drugo korisno.

Poređenje brojeva

U skriptama možete upoređivati ​​numeričke vrijednosti. Ispod je lista relevantnih komandi.
n1 -eq n2 Vraća istinito ako je n1 jednako n2.
n1 -ge n2 Vraća istinito ako je n1 veće ili jednako n2.
n1 -gt n2 Vraća istinito ako je n1 veće od n2.
n1 -le n2 Vraća istinito ako je n1 manje ili jednako n2.
n1 -lt n2 Vraća istinito ako je n1 manje od n2.
n1 -ne n2 Vraća tačno ako n1 nije jednako n2.

Kao primjer, pokušajmo s jednim od operatora poređenja. Imajte na umu da je izraz zatvoren u uglastim zagradama.

#!/bin/bash val1=6 if [ $val1 -gt 5 ] then echo "Test vrijednost $val1 je veća od 5" inače echo "Test vrijednost $val1 nije veća od 5" fi
Ovo je ono što će ova komanda proizvesti.


Poređenje brojeva u skriptama

Vrijednost varijable val1 je veća od 5, kao rezultat toga se izvršava grana tada operatora poređenja i odgovarajuća poruka se prikazuje u konzoli.

Poređenje nizova

Skripte također mogu upoređivati ​​vrijednosti nizova. Operatori poređenja izgledaju prilično jednostavno, ali operacije poređenja nizova imaju određene karakteristike, kojih ćemo se dotaknuti u nastavku. Evo liste operatera.
str1 = str2 Testira stringove na jednakost, vraćajući true ako su stringovi identični.
s tr1 != str2 Vraća true ako stringovi nisu identični.
str1< str2 Возвращает истину, если str1 меньше, чем str2 .
str1 > str2 Vraća true ako je str1 veći od str2.
-n str1 Vraća tačno ako je dužina str1 veća od nule.
-z str1 Vraća tačno ako je dužina str1 nula.

Evo primjera poređenja nizova u skripti:

#!/bin/bash korisnik ="likegeeks" if [$user = $USER] then echo "Korisnik $user je trenutno prijavljen korisnik" fi
Kao rezultat izvršavanja skripte, dobijamo sljedeće.


Poređenje stringova u skriptama

Evo jedne karakteristike poređenja stringova koja je vrijedna spomena. Naime, operatori ">" i "<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>» kao naredba za preusmjeravanje izlaza.

Evo kako rad sa ovim operatorima izgleda u kodu:

#!/bin/bash val1=text val2="drugi tekst" ako [ $val1 \>
Evo rezultata skripte.


Poređenje nizova, dato upozorenje

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

./myscript: red 5: [: previše argumenata
Da bismo se riješili ovog upozorenja, stavljamo $val2 u dvostruke navodnike:

#!/bin/bash val1=text val2="drugi tekst" ako [ $val1 \> "$val2" ] onda echo "$val1 je veći od $val2" inače echo "$val1 je manji od $val2" fi
Sada sve radi kako treba.


Poređenje nizova

Još jedna karakteristika operatora “>” i “<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:

Likegeeks likegeeks
Sačuvajmo ga, dajući mu ime myfile , a zatim pokrenite sljedeću naredbu u terminalu:

Sortiraj moj fajl
On će sortirati redove iz fajla ovako:

Likegeeks Likegeeks
Naredba sort, po defaultu, sortira nizove uzlaznim redoslijedom, odnosno, malo slovo u našem primjeru je manje od velikog. Sada pripremimo skriptu koja će upoređivati ​​iste nizove:

#!/bin/bash val1=Likegeeks val2=likegeeks ako [ $val1 \> $val2 ] onda echo "$val1 je veći od $val2" inače echo "$val1 je manji od $val2" fi
Ako ga pokrenete, ispostaviće se da je sve obrnuto - malo slovo je sada veće od velikog.


Komanda sortiranja i poređenje stringova u datoteci skripte

U naredbama za poređenje, velika slova su manja od malih slova. Poređenje nizova ovdje se vrši poređenjem ASCII kodova znakova, tako da redoslijed sortiranja ovisi o kodovima znakova.

Komanda sortiranja, zauzvrat, koristi redoslijed sortiranja naveden u postavkama jezika sistema.

Provjere datoteka

Možda se sljedeće komande najčešće koriste u bash skriptama. Oni vam omogućavaju da provjerite različite uvjete u vezi s datotekama. Evo liste ovih naredbi.
-d datoteka Provjerava da li datoteka postoji i da li je direktorij.
-e datoteka Provjerava da li datoteka postoji.
-f datoteka Provjerava da li datoteka postoji i da li je datoteka.
-r datoteka Provjerava da li datoteka postoji i da li je čitljiva.
-s datoteka Provjerava da li datoteka postoji i nije li prazna.
-w datoteka Provjerava da li datoteka postoji i da li je moguće pisati.
-x datoteka Provjerava da li datoteka postoji i da li je izvršna.
file1 -nt file2 Provjerava da li je fajl1 noviji od fajla2.
file1 -ot file2 Provjerava da li je fajl1 stariji od fajla2.
-O datoteka Provjerava da li datoteka postoji i da li je u vlasništvu trenutnog korisnika.
-G datoteka Provjerava da li datoteka postoji i da li njen ID grupe odgovara ID-u grupe trenutnog korisnika.

Ove komande, kao i mnoge druge o kojima se danas raspravlja, lako se pamte. Njihova imena, kao skraćenice različitih riječi, direktno ukazuju na provjere koje obavljaju.

Isprobajmo jednu od naredbi u praksi:

#!/bin/bash mydir=/home/likegeeks if [ -d $mydir ] then echo "Direktorij $mydir postoji" cd $ mydir ls else echo "Direktorij $mydir ne postoji" fi
Ova skripta, za postojeći direktorij, će prikazati njegov sadržaj.


Ispisivanje sadržaja direktorija

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

Rezultati

Danas smo razgovarali o tome kako započeti pisanje bash skripti i pokrili neke osnovne stvari. U stvari, tema bash programiranja je ogromna. Ovaj članak je prijevod prvog dijela velike serije od 11 materijala. Ako želite da nastavite odmah, evo liste originala ovih materijala. Radi praktičnosti, ovdje je uključen prijevod koji ste upravo pročitali.

Prije svega, hajde da shvatimo šta je to script i zašto je to potrebno.

Skripta prevedeno sa engleskog - scenario. Svi gledamo filmove, mnogi od nas gledaju predstave. Da bi kreirali film/predstavu, scenaristi za njih pišu scenarije, na osnovu kojih glumci izvode svoje uloge na sceni, scenu po scenu, od koje je film/predstava napravljena. Posao izrade scenarija je prilično mukotrpan, gdje treba uzeti u obzir sve do najsitnijeg detalja, kako bi umjetnici na kraju ispunili ono što je scenarista naumio, a gledalac mogao vidjeti kompletan rad.

Slično, skripte se pišu da izvrše listu zadataka koje korisnik sastavlja (kod) kako bi ih lakše i brže izvršili na operativnom sistemu. Za pisanje jednostavnih skripti uopće nije potrebno imati obrazovanje programera.

Prvo, napravimo najjednostavniji script-Shell da ažurirate sistem.

Sve radnje ću izvršiti sa sistemom Ubuntu, ali su primjenjivi i na druge sisteme Linux, izvedeno iz Ubuntu. Za ovo nam je potrebno: Uređivač teksta da ga ispunite potrebnim zadacima za kreiranje skripte (koda) i Terminal- da izvršite kreiranu skriptu. Ovi alati su instalirani u bilo kojoj distribuciji Linux default.

Dakle, otvorite uređivač teksta Gedit i u njega unesite prve tražene znakove shebang.
shebang u programiranju, ovo je niz od dva znaka: hash i znak uzvika ( #! ) na početku datoteke skripte. I dodajte ovim znakovima bez razmaka /bin/sh- interpreter u kojem će se skripta izvršavati. /bin/sh- Ovo je obično Bourne shell ili kompatibilan interpreter komandne linije koji prolazi "put/do/skripta" kao prvi parametar.
Prva obavezna linija skripte će izgledati ovako:

# Moja prva skripta za ažuriranje Ubuntua

Heš znak (#) na samom početku reda jasno stavlja do znanja interpretatoru/terminalu da ovaj red ne treba čitati i izvršavati. Red je potreban u kodu ove skripte kako bi kreator skripte znao šta će uraditi u ovom segmentu/sceni u kodu, kako se ne bi zbunili u budućnosti kada takvih redova bude mnogo. Takve linije sa heš znakom nazivaju se - prokomentarisao .

sudo apt update
sudo apt nadogradnja -y

-y na kraju druge naredbe tumači/terminalu jasno daje do znanja da se ova radnja/komanda mora izvršiti automatski, bez dodatne potvrde korisnika pritiskom na tipku Enter. y- skraćenica za engleski da, tj. Da.

To je sve. Vaša prva skripta je kreirana. Trebalo bi da dobijete nešto poput slike:


Ostaje samo da sačuvate kreiranu datoteku/skriptu i date je Ime sa obaveznim produžetkom na kraju - .sh. Produžetak .sh dodijeljen izvršnoj datoteci.
Dao sam mu Ime - update.sh, ušteda u Početna fascikla korisnik:


Da bi kreirana datoteka/skripta bila izvršna, mora mu se dati dozvola za to. Postoje dva načina da to uradite.

1. Pokrenite sljedeću naredbu u terminalu:

sudo chmod +x update.sh

2. Ili otvorite upravitelj datoteka Početna fascikla(gde ste sačuvali kreiranu skriptu), kliknite desnim tasterom miša na datoteku, u kontekstualnom meniju - Svojstva - Prava i aktiviraj stavku - Performanse: Dozvolite da se datoteka izvršava kao program:


Da biste izvršili kreiranu skriptu, potrebno je da otvorite terminal (kao što sam napisao na samom početku članka da je terminal neophodan atribut/alat za izvršavanje skripte), unesite sh, odvojeno razmakom ime skripte - update.sh i pritisnite tipku Enter:


Ili u terminal koji ulazimo sh i prevucite kreiranu datoteku sa skriptom iz upravitelja datoteka (takođe odvojeno razmakom):


Nakon što se nakon naredbe prikaže putanja datoteke sh i razmak, samo pritisnite tipku Enter(Enter) da izvršite ažuriranje sistema:


Sada u svakom trenutku možete ažurirati sistem koristeći vlastitu skriptu.

Da, neko bi mogao da tvrdi da ažuriranje sistema nije teško izvršiti izvršavanjem ove dve komande u terminalu, zašto se naduvavati i kreirati neke skripte? Tako je. Ali ovo je primjer kreiranja jednostavnog scenarija koji pokazuje da "nisu bogovi ti koji spaljuju lonce"

Za pisanje jednostavne bash skripte, moramo izvršiti sljedeće jednostavne korake:

Kako sve funkcionira:

Prvi red naše skripte #!/bin/bash je neophodan da bi se naša skripta uspješno izvršila.

drugi red mkdir testdir kreira direktorij testdir

treći red cd testdir vam omogućava da odete na kreirani direktorij testdir

tim dodir u sledećem redu dodirnite fajl1 fajl2 fajl3 kreira tri fajla

a posljednja komanda u redu naše skripte, ls -al, omogućava vam da prikažete sadržaj trenutnog direktorija, u kojem su se, zahvaljujući prethodnom redu, pojavile tri prazne datoteke.

Kao što vidimo, u našoj jednostavna skripta sve naredbe počinju u novom redu. Svaki red, prilikom pokretanja skripte, uzastopno obavlja svoj posao, izvodeći određene radnje.

Ako svakodnevno izvršavate lanac bilo koje identične komande (sa konstantnim parametrima) u Linuxu, onda možda ima smisla da napišete iste jednostavna bash skripta, što će vam omogućiti da uštedite svoje vrijeme i automatizirate svoj rad.

Najbolji članci na ovu temu