u siguran naše pojmovi Naučit ćemo 2 vrlo korisna alata za programiranje koji savršeno rade u Bashu. Naučite stvarati funkcije i definirati cjevovodi u početku može izgledati složeno, ali tada ćemo vidjeti neizmjerno korisnost koje nam pružaju. |
Cijevi
Konkretno, bez pretjeranog okretanja, cjevovod je metoda koja omogućuje usmjeravanje rezultata jednog procesa kao ulaza drugog, što omogućuje niz prednosti, poput smanjenja reda koda, ispuštanja varijabli za pohranu rezultata i poboljšanja učinkovitost skripte.
Cijev se općenito prepoznaje po simbolu | koji vam omogućuje spajanje izraza; Iako se koristi prema zadanim postavkama, postoje i drugi načini za stvaranje cijevi.
Primjer: ispis nedavnih poruka jezgre
#dmesg omogućuje vam pregled nedavnih poruka jezgre i učitanih upravljačkih programa # tijekom pokretanja sustava; tail ispisuje posljednje dijelove datoteke ili # naredbe
dmesg | rep
Iako se mogu komplicirati koliko god želimo, osnovna struktura cjevovoda omogućuje da se rezultat jedne naredbe koristi kao ulaz u sljedeću, što može pružiti unos nove naredbe ako nastavimo dodavati uzastopne cijevi.
Funkcije
Funkcije su skup izjava koje su grupirane zajedno tako da se mogu izvršiti nekoliko puta bez potrebe za njihovim ponovnim pisanjem. Ekvivalentno je razmišljanju da kada naučimo kuhati neku vrstu hrane, zapisat ćemo njezin recept na list i svaki put kad želimo kuhati tu hranu konzultiramo recept, umjesto da novi list prepišemo s istim receptom.
Možda najvažnija stvar kod funkcija je mogućnost prosljeđivanja parametara, podataka koje će koristiti za njihovu obradu i generiranje rezultata. Njegova je struktura sljedeća:
funkcija ime-funkcije {
procesi
}
Primjer: funkcija koja prikazuje usluge koje rade na tcp protokolu. Također možemo vidjeti kako primijeniti više cijevi.
# Definiramo naziv funkcije, može biti onaj koji nam se sviđa.
funkcija services_tcp {
#cat spaja i prikazuje sadržaj mape / etc / services, a to je # koja sadrži sve usluge s pripadajućim priključcima.
#prvi grep uzima popis i uklanja komentare, s –v invertiramo rezultat
# drugi grep prikazuje samo one povezane s tcp-om
mačka / itd. / usluge | grep –v "^ #" | grep tcp
}
Kad trebamo izvršiti ovu funkciju, moramo je nazvati imenom:
tcp_services
U ovom slučaju radi bez parametara; U slučaju da ih ima, moramo ih dodati kako bi funkcija ispravno radila, inače funkcija neće raditi ispravno. Korištenje return omogućuje funkciji da vrati vrijednost kao rezultat procesa.
Primjer: funkcija s ulaznim parametrima koja izračunava zbroj 2 broja.
#! / bin / bash
zbroj funkcija ()
{
# with neka možemo izvršiti operaciju unutar navodnika
neka "rezultat = $ 1 + $ 2"
#return omogućuje vraćanje cijele vrijednosti. Nakon izvršavanja povrata, vrijednost će se pohraniti unutar varijable $?
vrati $ rezultat;
}
# Pozva se funkcija zbroja i prolazimo 2 ulazna parametra.
dodaj 2 3
#prints vrijednost $? s odjekom koji procjenjuje stvarnu vrijednost varijable u navodnicima
echo -e "Rezultat = $?";
Nisam siguran, ali naredba return funkcija služi samo za vraćanje cijelog broja između 0 i 255, poput kodova pogrešaka "exit", obično 0 ako je sve u redu i drugi broj za ostale slučajeve. Iako ovo djeluje u primjeru, mislim da nije dobra praksa vraćati rezultat povratkom.
Tamo kažem glupost, a! oko! Ha!
Istina me ostavila u sumnji. U svakom slučaju, da bismo izbjegli probleme s funkcijama, povrat možemo zamijeniti odjekom u slučaju da funkcija želi vratiti ili ispisati vrijednost ili niz.
Istina je, da biste to riješili možete koristiti naredbu bc, u funkciji zbroja možete koristiti: result = `echo $ 1 + $ 2 | bc -ql`
dobar,
Želio bih znati gdje mogu spremiti bash datoteke za pokretanje cijelog sustava, a to nije bin direktorij, ali može biti dom za sigurnosnu kopiju.
Hvala i pozdrav.
Puno vam hvala, počinjem sa skriptama, a istina je da je ovo vrlo korisno, vrlo ste ljubazni i dijelite svoje znanje!
pozdravi
Hvala vam! Zagrliti!
Pavle
Sintaksna pogreška: "(" neočekivano
Dobivam pogrešku prilikom pokušaja pokretanja primjera, kopirao sam ga potpuno isto
Što može biti? ja sam na ubuntuu 14.10