Bash-skriptit: alku

Bash-skriptit: alku
Bash Scripts Osa 2: Silmukat
Bash-komentosarjat, osa 3: Komentorivivaihtoehdot ja kytkimet
Bash Scripts Osa 4: Syöttö ja lähtö
Bash Scripts, Osa 5: Signaalit, taustatehtävät, komentosarjan hallinta
Bash Scripts, Osa 6: Funktiot ja kirjastojen kehitys
Bash Scripts, osa 7: sed ja tekstinkäsittely
Bash-skriptit, osa 8: awk-tietojenkäsittelykieli
Bash-komentosarjat Osa 9: Säännölliset lausekkeet
Bash Scripts Osa 10: Käytännön esimerkkejä
Bash-skriptit, osa 11: interaktiivisten apuohjelmien odotus ja automatisointi

Tänään puhumme bash-skripteistä. Tämä - komentorivin skriptit, 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ä komentorivi Linux.

Bash-skriptit: alku

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.

Bash-skriptit: alku

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_MAX

Komentorivi 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. shebang) 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
whoami

Tää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.

Bash-skriptit: alku
Yritetään ajaa komentosarjatiedostoa väärin määritetyillä käyttöoikeuksilla

Tehdään tiedostosta suoritettava:

chmod +x ./myscript

Yritetään nyt suorittaa se:

./myscript

Lupien asettamisen jälkeen kaikki toimii kuten pitääkin.

Bash-skriptit: alku
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:"
whoami

Näin tapahtuu päivitetyn skriptin suorittamisen jälkeen.

Bash-skriptit: alku
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 tämä 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.

Bash-skriptit: alku
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.

Bash-skriptit: alku
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.

Bash-skriptit: alku
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.

Bash-skriptit: alku
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

Bash-skriptit: alku
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
команды
fi

Tä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"
fi

Näin tapahtuu tämän skriptin suorittamisen jälkeen.

Bash-skriptit: alku
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äällä.

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.

Bash-skriptit: alku
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, jos n1 on n2.
n1 -ge n2 Palauttaa todeksi, jos n1enemmän tai yhtä paljon n2.
n1 -gt n2Palauttaa todeksi, jos n1 больше n2.
n1 -le n2Palauttaa todeksi, jos n1pienempi tai yhtä suuri n2.
n1 -lt n2Palauttaa tosi, jos n1 on pienempi kuin n2.
n1 -ne n2Palauttaa todeksi, jos n1ei 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"
fi

Tämä on tämä komento tulostaa.

Bash-skriptit: alku
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 = str2 Testaa merkkijonojen tasa-arvoa ja palauttaa arvon tosi, jos merkkijonot ovat identtisiä.
str1 != str2Palauttaa tosi, jos merkkijonot eivät ole identtisiä.
str1 < str2Palauttaa todeksi, jos str1vähemmän kuin str2.
str1 > str2 Palauttaa todeksi, jos str1enemmän kuin str2.
-n str1 Palauttaa tosi, jos pituus str1Nollan yläpuolella.
-z str1Palauttaa tosi, jos pituus str1yhtä 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"
fi

Skriptin suorittamisen tuloksena saamme seuraavan.

Bash-skriptit: alku
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"
fi

Tässä ovat käsikirjoituksen tulokset.

Bash-skriptit: alku
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"
fi

Nyt kaikki toimii niinkuin pitääkin.

Bash-skriptit: alku
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 myfile

Se 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"
fi

Jos suoritat sen, käy ilmi, että kaikki on päinvastoin - pieni kirjain on nyt suurempi kuin iso.

Bash-skriptit: alku
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 file Tarkistaa, 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 file2 Tarkistaa onko uudempi file1Kuin file2.
file1 -ot file2Tarkistaa onko vanhempi file1Kuin file2.
-O file Tarkistaa, 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"
fi

Tämä olemassa olevan hakemiston komentosarja näyttää sen sisällön.

Bash-skriptit: alku
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.

  1. Bash-skripti askel askeleelta — tässä puhutaan bash-skriptien luomisen aloittamisesta, tarkastellaan muuttujien käyttöä, kuvataan ehdollisia rakenteita, laskelmia, lukujen, merkkijonojen vertailuja ja tiedostojen tietojen selvittämistä.
  2. Bash Scripting osa 2, Bash the awesome — Tässä paljastetaan for- ja while-silmukoiden kanssa työskentelyn ominaisuudet.
  3. Bash Scripting Osa 3, Parametrit ja asetukset — 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.
  4. Bash Scripting Osa 4, Input & Output - Tässä puhutaan tiedostokuvaajista ja niiden kanssa työskentelystä, syötteestä, lähdöstä, virhevirroista ja tulosteen uudelleenohjauksesta.
  5. Bash Scripting Osa 5, Sighals & Jobs - Tämä materiaali on omistettu signaaleille Linux, niiden käsittely skripteissä ja skriptien suorittaminen aikataulun mukaisesti.
  6. Bash Scripting Osa 6, Funktiot — Täältä voit oppia funktioiden luomisesta ja käyttämisestä komentosarjoissa ja kirjastojen kehittämisessä.
  7. Bash-komentosarjan osa 7, sed - Tämä artikkeli on omistettu työskentelylle sed-suoratoistotekstieditorin kanssa.
  8. Bash Scripting Osa 8, awk — Tämä materiaali on omistettu ohjelmointiin awk-tietojenkäsittelykielellä.
  9. Bash Scripting Osa 9, Säännölliset lausekkeet - Täältä voit lukea säännöllisten lausekkeiden käyttämisestä bash-skripteissä.
  10. Bash-komentosarjan osa 10, käytännön esimerkkejä — Tässä on tekniikoita käyttäjille lähetettävien viestien käsittelyyn sekä menetelmä levyn valvontaan.
  11. Bash Scripting osa 11, Expect Command — 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.

Bash-skriptit: alku

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, 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

Osta luotettava isännöinti sivustoille, joissa on DDoS-suojaus, VPS VDS -palvelimet 🔥 Osta luotettavaa verkkosivustojen hostingia DDoS-suojauksella, VPS VDS -palvelimilla | ProHoster