Vodič za početnike za Shell Scripting 4 Uvjeti & Ako-onda Izjave
U našem vodiču za skriptiranje skripti pokrili smo dovoljno osnove da biste se trebali osjećati ugodno eksperimentirati. U ovom tjednu ćemo rješavati neke od zabavnijih stvari, poput uvjeta i izjava "ako-onda".
Koji su uvjeti?
U svakodnevnom jeziku kažemo da su uvjeti zahtjevi koji se moraju ispuniti da bi se nešto dogodilo. Da bi se moje prijenosno računalo moglo povezati s internetom, potrebno je ispuniti nekoliko uvjeta, kao što je postavljanje ISP-a, modema i / ili usmjerivača, uključivanje prijenosnog računala itd. Prilično je jednostavno, a ako postoji od tih zahtjeva nisu ispunjeni, rezultat - moje prijenosno računalo povezuje se s internetom - ne događa se.
Isto tako, uvjeti u području računalnog rada. Možemo testirati da li se niz podudara s drugim nizom, bez obzira na to podudara li se s drugim nizom, ili čak ako uopće postoji. Slično tome, možemo testirati numeričke argumente kako bismo vidjeli je li on velik od, manji ili jednak drugom. Da bi se nešto dogodilo nakon što su zadovoljeni uvjeti testa, koristimo izjave "ako-onda". Njihov format je prilično jednostavan.
ako je CONDITION
zatim
command1
command2
...
commandn
fi
Ako su Izjave
Pokušajmo brzo testirati, hoćemo li?
ako testirate $ 1 -gt $ 2
zatim
echo "$ 1 je veći od 2 USD"
fi
Primijetit ćete da samo kada je taj uvjet istinit, skripta će izvršiti sljedeću naredbu. U suprotnom, izlaz će "if". Ako postoje naredbe nakon izjave "if", one će se izvoditi kao i obično. Dodao sam sljedeći redak na kraj gornje skripte kako bih ilustrirao ovo:
echo "Ovo dolazi nakon izjave if"
Evo nekih drugih numeričkih operatora koje možete isprobati:
- -eq: jednako
- -ne: nije jednako
- -lt: manje od
- -le: manje ili jednako
- -gt: veći od
- -ge: veći ili jednak
Testiranje nizova
Sada, ako izmijenimo prvi redak naše skripte da bude ovo:
ako je test $ 1 = $ 2
tada će se stanje testirati ako su dva jednaka. Tu je uhvatiti ovdje ipak! Upotreba znaka jednakosti (=) uspoređuje dva niza, a ne brojeve. Ako želite usporediti brojeve, upotrijebite operator "-eq" slično onome kako smo koristili "-gt" iznad.
Sada napravimo još jednu izmjenu:
ako testira $ 1! = $ 2
Uključivanje uskličnika (!) Djeluje kao "ne" modifikator. To znači da pokreće samo sljedeću naredbu kada se dva niza ne podudaraju.
Evo popisa nekih testova temeljenih na nizovima koje možete koristiti:
- string: koristi samo argument koji se sam testira ako string nije prazan (null) ili nije definiran na neki način
- -n string: ovo će provjeriti je li string prazan i definiran
- -z string: ovo će provjeriti je li string prazan i definiran na taj način
Što još o ako?
Priznajem, naslov naslova je definitivno bio loša igra. Dobro, znamo kako izvršiti naredbu ako je test istinit, ali što ako želimo izvršiti drugu naredbu ako je lažna? Lako ih možemo povezati dodavanjem dijela našim izjavama "ako-onda" - "drugo"!
ako je CONDITION
zatim
command1
command2
...
commandn
drugo
command1
command2
...
commandn
fi
Spojimo jednostavnu skriptu.
Sve je to s ispravnom udubljenjem. Ako bolje pogledate, primijetit ćete da smo umjesto testne naredbe koristili uglate zagrade ([i]). Funkcionalno su ekvivalentne za naše potrebe, a vjerojatnije je da ćete vidjeti kvadratne zagrade iz različitih razloga, pa ćemo ih od sada koristiti.
Evo kako će izgledati:
Tako je jednostavno!
Što mi je činiti sada?
Sada kada znate kako koristiti izraze "if-then-else", možete pokrenuti skripte koje mogu izvoditi testove. Na primjer, možete pokrenuti skriptu koja će izračunati md5 hash datoteke, a zatim je usporediti s onom koju ste preuzeli u datoteku kako biste vidjeli odgovaraju li.
Za neke bonus točke možete stvoriti skriptu koja ima petlju "za", ali koristi testne uvjete umjesto čitanja redaka iz datoteke popisa ...
Približavamo se nekim zanimljivijim dijelovima našeg Vodiča za početnike za skriptiranje. Ako ste propustili prethodne lekcije, evo kratkog popisa koji možete provjeriti:
- Osnove skriptiranja ljuske
- Korištenje za petlje
- Više osnovnih naredbi
- Koje su razlike između Linux ljuski?
- Kako koristiti osnovne regularne izraze
Ako ste izradili ili upotrijebili skripte koje koriste uvjete testiranja, izjave if-then-else i "for", podijelite s nama dolje u komentarima!