Tänään puhumme bash-skripteistä. Tämä - , kirjoitettu bash-kuorelle. On muitakin kuoria, kuten zsh, tcsh, ksh, mutta keskitymme bashiin. Tämä materiaali on tarkoitettu kaikille, ainoa ehto on kyky työskennellä Linux.
Komentorivikomentosarjat ovat samojen komentojen kokoelmia, jotka voidaan syöttää näppäimistöltä, koota tiedostoiksi ja yhdistää johonkin yhteiseen tarkoitukseen. Tässä tapauksessa ryhmien työn tuloksilla voi olla joko itsenäistä arvoa tai se voi toimia syöttötietona muille ryhmille. Skriptit ovat tehokas tapa automatisoida usein suoritettuja toimintoja.
Joten, jos puhumme komentorivistä, sen avulla voit suorittaa useita komentoja kerralla syöttämällä ne puolipisteellä erotettuina:
pwd ; whoami Itse asiassa, jos kokeilit tätä terminaalissasi, ensimmäinen bash-skriptisi, joka sisältää kaksi komentoa, on jo kirjoitettu. Se toimii näin. Joukkue ensin pwd näyttää tiedot nykyisestä työhakemistosta ja sitten komennon whoaminäyttää tietoja käyttäjästä, jona olet kirjautunut sisään.
Tätä lähestymistapaa käyttämällä voit yhdistää yhdelle riville niin monta komentoa kuin haluat, ainoa raja on ohjelmalle välitettävien argumenttien enimmäismäärä. Voit määrittää tämän rajan seuraavalla komennolla:
getconf ARG_MAXKomentorivi on loistava työkalu, mutta sinun on syötettävä siihen komentoja aina, kun tarvitset niitä. Entä jos kirjoittaisimme joukon komentoja tiedostoon ja kutsuisimme sitä tiedostoa suorittamaan ne? Itse asiassa tiedostoa, josta puhumme, kutsutaan komentorivikomentosarjaksi.
Kuinka bash-skriptit toimivat
Luo tyhjä tiedosto komennolla touch. Sen ensimmäisellä rivillä on ilmoitettava, mitä kuorta aiomme käyttää. Olemme kiinnostuneita bash, joten tiedoston ensimmäinen rivi on:
#!/bin/bash Muut tämän tiedoston rivit käyttävät hash-symbolia osoittamaan kommentteja, joita kuori ei käsittele. Ensimmäinen rivi on kuitenkin erikoistapaus, siinä on hash, jota seuraa huutomerkki (tämä sekvenssi on ns. ) ja polku bash, ilmoittaa järjestelmälle, jota varten komentosarja on luotu bash.
Shell-komennot erotetaan rivinsiirrolla, kommentit erotetaan hash-merkillä. Tältä se näyttää:
#!/bin/bash
# This is a comment
pwd
whoamiTäällä, kuten komentorivillä, voit kirjoittaa komentoja yhdelle riville puolipisteillä erotettuina. Jos kuitenkin kirjoitat komennot eri riveille, tiedosto on helpompi lukea. Joka tapauksessa kuori käsittelee ne.
Komentosarjatiedoston käyttöoikeuksien asettaminen
Tallenna tiedosto ja anna sille nimi myscript, ja bash-skriptin luontityö on melkein valmis. Nyt on vain tehtävä tämä tiedosto suoritettavaksi, muuten jos yrität suorittaa sen, saat virheilmoituksen Permission denied.

Yritetään ajaa komentosarjatiedostoa väärin määritetyillä käyttöoikeuksilla
Tehdään tiedostosta suoritettava:
chmod +x ./myscriptYritetään nyt suorittaa se:
./myscriptLupien asettamisen jälkeen kaikki toimii kuten pitääkin.

Bash-skriptin suorittaminen onnistui
Viestin ulostulo
Tekstin tulostaminen konsoliin Linux komentoa käytetään echo. Hyödynnämme tämän tosiasian tietämystä ja muokkaamme skriptiämme lisäämällä selitykset tietoihin, jotka siinä jo olevat komennot tuottavat:
#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoamiNäin tapahtuu päivitetyn skriptin suorittamisen jälkeen.

Viestien tulostaminen skriptistä
Nyt voimme näyttää selittäviä huomautuksia komennolla echoJos et tiedä, miten tiedostoa muokataan työkaluilla Linuxtai et ole tavannut tiimiä aiemmin echo, Katso materiaalia.
Muuttujien käyttö
Muuttujien avulla voit tallentaa komentosarjatiedostoon tietoja, kuten komentojen tulokset, muiden komentojen käyttöä varten.
Ei ole mitään väärää yksittäisten komentojen suorittamisessa tallentamatta niiden tuloksia, mutta tämän lähestymistavan ominaisuudet ovat hyvin rajalliset.
Bash-skripteissä voidaan käyttää kahdenlaisia muuttujia:
- ympäristömuuttujat
- Käyttäjän muuttujat
ympäristömuuttujat
Joskus komentotulkkikomentojen on toimittava joidenkin järjestelmätietojen kanssa. Tässä on esimerkki nykyisen käyttäjän kotihakemiston näyttämisestä:
#!/bin/bash
# display user home
echo "Home for the current user is: $HOME" Huomaa, että voimme käyttää järjestelmämuuttujaa $HOME lainausmerkeissä, tämä ei estä järjestelmää tunnistamasta sitä. Tämän saat, jos suoritat yllä olevan skenaarion.

Ympäristömuuttujan käyttö skriptissä
Entä jos sinun täytyy näyttää dollarimerkki näytöllä? Kokeillaanpa tätä:
echo "I have $1 in my pocket" Järjestelmä havaitsee dollarin merkin lainatussa merkkijonossa ja olettaa, että olemme viitanneet muuttujaan. Skripti yrittää näyttää määrittelemättömän muuttujan arvon $1. Tätä emme tarvitse. Mitä tehdä?
Tässä tilanteessa Escape-merkin, kenoviivan käyttö ennen dollarimerkkiä auttaa:
echo "I have $1 in my pocket"Käsikirjoitus tulostaa nyt juuri sen, mitä on odotettu.

Escape-sekvenssin käyttäminen dollarimerkin tulostamiseen
Käyttäjän muuttujat
Ympäristömuuttujien lisäksi bash-skriptien avulla voit määrittää ja käyttää komentosarjassa omia muuttujiasi. Tällaisilla muuttujilla on arvo, kunnes komentosarja on suorittanut loppuun.
Kuten järjestelmämuuttujien kohdalla, käyttäjämuuttujia voidaan käyttää dollarimerkillä:
TNW-CUS-FMP - tarjouskoodi 10% alennukseen palveluistamme, aktivoitava 7 päivän sisällä
#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"Näin tapahtuu sellaisen skriptin suorittamisen jälkeen.

Mukautetut muuttujat skriptissä
Komennon korvaaminen
Yksi bash-skriptien hyödyllisimmistä ominaisuuksista on kyky poimia tietoja komennon lähdöstä ja liittää ne muuttujiin, jolloin voit käyttää näitä tietoja missä tahansa komentosarjatiedostossa.
Voit tehdä tämän kahdella tavalla.
- Takaisinmerkin "`" käyttäminen
- Suunnittelultaan
$()
Kun käytät ensimmäistä lähestymistapaa, ole varovainen, ettet sisällytä yhtäkään lainausmerkkiä takamerkin tilalle. Komento on sisällytettävä kahteen tällaiseen kuvakkeeseen:
mydir=`pwd`Toisessa lähestymistavassa sama asia kirjoitetaan näin:
mydir=$(pwd)Ja käsikirjoitus saattaa näyttää tältä:
#!/bin/bash
mydir=$(pwd)
echo $mydir Toiminnan aikana komennon tulos pwdtallennetaan muuttujaan mydir, jonka sisältö komennolla echo, menee konsoliin.

Komentosarja, joka tallentaa komennon tulokset muuttujaan
Matemaattiset operaatiot
Jos haluat suorittaa matemaattisia operaatioita komentosarjatiedostossa, voit käyttää konstruktia, kuten $((a+b)):
#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2 
Matemaattiset operaatiot käsikirjoituksessa
jos-niin ohjausrakenne
Joissakin tilanteissa sinun on ohjattava komennon suorituskulkua. Jos esimerkiksi tietty arvo on suurempi kuin viisi, sinun on suoritettava yksi toiminto, muuten toinen. Tämä pätee monissa tilanteissa, ja tässä ohjausrakenne auttaa meitä if-then. Yksinkertaisimmassa muodossaan se näyttää tältä:
if команда
then
команды
fiTässä toimiva esimerkki:
#!/bin/bash
if pwd
then
echo "It works"
fi Tässä tapauksessa, jos komento suoritetaan pwdvalmistuu onnistuneesti, teksti "se toimii" näkyy konsolissa.
Hyödynnetään osaamistamme ja kirjoitetaan monimutkaisempi käsikirjoitus. Oletetaan, että meidän on löydettävä tietty käyttäjä /etc/passwd, ja jos onnistuit löytämään sen, ilmoita sen olemassaolosta.
#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fiNäin tapahtuu tämän skriptin suorittamisen jälkeen.

Käyttäjähaku
Tässä käytimme komentoa grepetsiäksesi käyttäjää tiedostosta /etc/passwd. Jos joukkue grepsinulle tuntematon, sen kuvaus löytyy .
Tässä esimerkissä, jos käyttäjä löytyy, komentosarja näyttää vastaavan viestin. Entä jos käyttäjää ei löydy? Tässä tapauksessa komentosarja yksinkertaisesti suorittaa suorituksen loppuun kertomatta meille mitään. Haluaisimme hänen kertovan meille myös tästä, joten parannamme koodia.
jos-niin-else-ohjausrakenne
Jotta ohjelma voisi raportoida sekä onnistuneen etsinnän että epäonnistumisen tulokset, käytämme konstruktiota if-then-else. Näin se toimii:
if команда
then
команды
else
команды
fi Jos ensimmäinen komento palauttaa nollan, mikä tarkoittaa, että se suoritettiin onnistuneesti, ehto on tosi ja suoritus ei etene haaraa pitkin else. Muussa tapauksessa, jos palautetaan jotain muuta kuin nolla, mikä merkitsisi epäonnistumista tai väärää tulosta, komennot sen jälkeen else.
Kirjoitetaan seuraava käsikirjoitus:
#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi Hänen teloituksensa meni viemäriin else.

Skriptin suorittaminen if-then-else-konstruktiolla
No, mennään eteenpäin ja kysytään itseltämme monimutkaisemmista olosuhteista. Entä jos sinun ei tarvitse tarkistaa yhtä ehtoa, vaan useita? Esimerkiksi jos haluttu käyttäjä löytyy, tulee näyttää yksi viesti, jos jokin muu ehto täyttyy, toinen viesti tulee näyttää ja niin edelleen. Tällaisessa tilanteessa sisäkkäiset ehdot auttavat meitä. Se näyttää tältä:
if команда1
then
команды
elif команда2
then
команды
fi Jos ensimmäinen komento palauttaa nollan, mikä osoittaa sen onnistuneen suorituksen, ensimmäisen lohkon komennot suoritetaan then, muuten, jos ensimmäinen ehto on epätosi ja jos toinen komento palauttaa nollan, toinen koodilohko suoritetaan.
#!/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 Tällaisessa komentosarjassa voit esimerkiksi luoda uuden käyttäjän komennolla useradd, jos haku ei tuottanut tuloksia, tai tee jotain muuta hyödyllistä.
Numeroiden vertailu
Skripteissä voit verrata numeerisia arvoja. Alla on luettelo asiaankuuluvista komennoista.
n1 -eq n2Palauttaa todeksi, josn1onn2.
n1 -ge n2Palauttaa todeksi, josn1enemmän tai yhtä paljonn2.
n1 -gt n2Palauttaa todeksi, josn1большеn2.
n1 -le n2Palauttaa todeksi, josn1pienempi tai yhtä suurin2.
n1 -lt n2Palauttaa tosi, jos n1 on pienempi kuinn2.
n1 -ne n2Palauttaa todeksi, josn1ei yhtän2.
Esimerkkinä kokeillaan yhtä vertailuoperaattoreista. Huomaa, että lauseke on suljettu hakasulkeissa.
#!/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"
fiTämä on tämä komento tulostaa.

Numeroiden vertailu skripteissä
Muuttuva arvo val1suurempi kuin 5, haara päättyy thenvertailuoperaattori ja vastaava viesti näkyy konsolissa.
Merkkijonojen vertailu
Skriptit voivat myös verrata merkkijonoarvoja. Vertailuoperaattorit näyttävät melko yksinkertaisilta, mutta merkkijonovertailuoperaatioissa on tiettyjä ominaisuuksia, joita käsittelemme alla. Tässä on luettelo operaattoreista.
str1 = str2Testaa merkkijonojen tasa-arvoa ja palauttaa arvon tosi, jos merkkijonot ovat identtisiä.
str1 != str2Palauttaa tosi, jos merkkijonot eivät ole identtisiä.
str1 < str2Palauttaa todeksi, josstr1vähemmän kuinstr2.
str1 > str2Palauttaa todeksi, josstr1enemmän kuinstr2.
-n str1Palauttaa tosi, jos pituusstr1Nollan yläpuolella.
-z str1Palauttaa tosi, jos pituusstr1yhtä suuri kuin nolla.
Tässä on esimerkki merkkijonojen vertailusta skriptissä:
#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user is the current logged in user"
fiSkriptin suorittamisen tuloksena saamme seuraavan.

Skriptien merkkijonojen vertailu
Tässä on yksi merkkijonovertailun ominaisuus, joka on mainitsemisen arvoinen. Nimittäin operaattorit ">" ja "<" tulee kirjoittaa kenoviivalla, muuten komentosarja ei toimi oikein, vaikka virheilmoituksia ei tulekaan. Skripti tulkitsee ">"-merkin lähdön uudelleenohjauskomennona.
Tältä näiden operaattoreiden kanssa työskentely näyttää koodissa:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiTässä ovat käsikirjoituksen tulokset.

Merkkijonojen vertailu, varoitus annettu
Huomaa, että vaikka komentosarja on suoritettu, se antaa varoituksen:
./myscript: line 5: [: too many arguments Päästämme eroon tästä varoituksesta $val2 lainausmerkeissä:
#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiNyt kaikki toimii niinkuin pitääkin.

Merkkijonojen vertailu
Toinen ">"- ja "<"-operaattoreiden ominaisuus on, kuinka ne toimivat isojen ja pienten kirjainten kanssa. Ymmärtääksemme tämän ominaisuuden, valmistetaan tekstitiedosto, jonka sisältö on seuraava:
Likegeeks
likegeeks Tallennetaan se antamalla sille nimi myfile, suorita sitten seuraava komento terminaalissa:
sort myfileSe lajittelee tiedoston rivit seuraavasti:
likegeeks
Likegeeks Joukkue sort, oletusarvoisesti lajittelee merkkijonot nousevaan järjestykseen, eli esimerkissämme pieni kirjain on pienempi kuin iso. Valmistetaan nyt skripti, joka vertaa samoja merkkijonoja:
#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fiJos suoritat sen, käy ilmi, että kaikki on päinvastoin - pieni kirjain on nyt suurempi kuin iso.

Lajittelukomento ja merkkijonojen vertailu komentosarjatiedostossa
Vertailukomentoissa isot kirjaimet ovat pienempiä kuin pienet kirjaimet. Merkkijonojen vertailu tapahtuu tässä vertaamalla merkkien ASCII-koodeja, joten lajittelujärjestys riippuu merkkikoodeista.
Joukkue sort, vuorostaan käyttää järjestelmän kieliasetuksissa määritettyä lajittelujärjestystä.
Tiedostojen tarkistukset
Ehkä seuraavia komentoja käytetään useimmiten bash-skripteissä. Niiden avulla voit tarkistaa tiedostojen erilaiset ehdot. Tässä on luettelo näistä komennoista.
-d fileTarkistaa, onko tiedosto olemassa ja onko se hakemisto.
-e fileTarkistaa, onko tiedosto olemassa.
-f fileTarkistaa, onko tiedosto olemassa ja onko se tiedosto.
-r fileTarkistaa, onko tiedosto olemassa ja onko se luettavissa.
-s file ПTarkistaa, onko tiedosto olemassa ja onko se tyhjä.
-w fileTarkistaa, onko tiedosto olemassa ja onko se kirjoitettava.
-x fileTarkistaa, onko tiedosto olemassa ja onko se suoritettava.
file1 -nt file2Tarkistaa onko uudempifile1Kuinfile2.
file1 -ot file2Tarkistaa onko vanhempifile1Kuinfile2.
-O fileTarkistaa, onko tiedosto olemassa ja nykyisen käyttäjän omistama.
-G fileTarkistaa, onko tiedosto olemassa ja vastaako sen ryhmätunnus nykyisen käyttäjän ryhmätunnusta.
Nämä komennot, kuten monet muut tänään käsitellyt komennot, on helppo muistaa. Niiden nimet, jotka ovat eri sanojen lyhenteitä, osoittavat suoraan heidän suorittamansa tarkastukset.
Kokeillaan yhtä komennoista käytännössä:
#!/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"
fiTämä olemassa olevan hakemiston komentosarja näyttää sen sisällön.

Hakemiston sisällön luettelointi
Uskomme, että voit kokeilla muita komentoja itse, niitä kaikkia käytetään saman periaatteen mukaan.
Tulokset
Tänään puhuimme bash-skriptien kirjoittamisen aloittamisesta ja käsittelimme joitain perusasioita. Itse asiassa bash-ohjelmoinnin aihe on valtava. Tämä artikkeli on käännös suuren 11 materiaalin sarjan ensimmäisestä osasta. Jos haluat jatkaa juuri nyt, tässä on luettelo näiden materiaalien alkuperäisistä. Mukavuuden vuoksi tässä on juuri lukemasi käännös.
- — tässä puhutaan bash-skriptien luomisen aloittamisesta, tarkastellaan muuttujien käyttöä, kuvataan ehdollisia rakenteita, laskelmia, lukujen, merkkijonojen vertailuja ja tiedostojen tietojen selvittämistä.
- — Tässä paljastetaan for- ja while-silmukoiden kanssa työskentelyn ominaisuudet.
- — Tämä materiaali on omistettu komentoriviparametreille ja avaimille, jotka voidaan välittää skripteille ja jotka työskentelevät käyttäjän syöttämien tietojen kanssa, jotka voidaan lukea tiedostoista.
- - Tässä puhutaan tiedostokuvaajista ja niiden kanssa työskentelystä, syötteestä, lähdöstä, virhevirroista ja tulosteen uudelleenohjauksesta.
- - Tämä materiaali on omistettu signaaleille Linux, niiden käsittely skripteissä ja skriptien suorittaminen aikataulun mukaisesti.
- — Täältä voit oppia funktioiden luomisesta ja käyttämisestä komentosarjoissa ja kirjastojen kehittämisessä.
- - Tämä artikkeli on omistettu työskentelylle sed-suoratoistotekstieditorin kanssa.
- — Tämä materiaali on omistettu ohjelmointiin awk-tietojenkäsittelykielellä.
- - Täältä voit lukea säännöllisten lausekkeiden käyttämisestä bash-skripteissä.
- — Tässä on tekniikoita käyttäjille lähetettävien viestien käsittelyyn sekä menetelmä levyn valvontaan.
- — Tämä materiaali on omistettu Expect-työkalulle, jonka avulla voit automatisoida vuorovaikutusta interaktiivisten apuohjelmien kanssa. Erityisesti puhumme odotusskripteistä ja niiden vuorovaikutuksesta bash-skriptien ja muiden ohjelmien kanssa.
Uskomme, että yksi tämän artikkelisarjan arvokkaista ominaisuuksista on se, että se alkaa kaikkein perustavimmasta, sopii kaiken tasoisille käyttäjille, ja johtaa vähitellen melko vakaviin aiheisiin, antaen kaikille mahdollisuuden edetä komentosarjojen luomisen saralla. Linux.
Hyvät lukijat! Pyydämme bash-ohjelmointiguruja puhumaan siitä, kuinka he saavuttivat mestaruutensa huippuja, jakamaan salaisuutensa, ja odotamme innolla vaikutelmia niiltä, jotka ovat juuri kirjoittaneet ensimmäisen käsikirjoituksensa.
Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. , ole kiltti.
Pitäisikö minun kääntää loput artikkelisarjasta?
Kyllä!
Ei ole tarvetta
1030 käyttäjää äänesti. 106 käyttäjää pidättyi äänestämästä.
Lähde: will.com
