Bash handrit: upphafið

Bash handrit: upphafið
Bash Scripts Part 2: Loops
Bash Scripts, Part 3: Skipanalínuvalkostir og rofar
Bash Scripts Part 4: Inntak og úttak
Bash forskriftir, hluti 5: Merki, bakgrunnsverkefni, forskriftastjórnun
Bash Scripts, Part 6: Functions and Library Development
Bash Scripts, Part 7: sed og ritvinnsla
Bash forskriftir, hluti 8: awk gagnavinnslutungumál
Bash Scripts Part 9: Regular Expressions
Bash Scripts Part 10: Hagnýt dæmi
Bash forskriftir, hluti 11: búast við og sjálfvirkni gagnvirkra tóla

Í dag munum við tala um bash forskriftir. Þetta - skipanalínu forskriftir, skrifað fyrir bash skelina. Það eru aðrar skeljar eins og zsh, tcsh, ksh, en við munum einbeita okkur að bash. Þetta efni er ætlað öllum, eina skilyrðið er hæfni til að vinna í skipanalínu Linux.

Bash handrit: upphafið

Skipanalínuforskriftir eru söfn af sömu skipunum sem hægt er að slá inn af lyklaborðinu, safna saman í skrár og sameina í einhverjum sameiginlegum tilgangi. Í þessu tilviki geta niðurstöður vinnu teymanna annað hvort verið sjálfstætt gildi eða þjónað sem inntaksgögn fyrir önnur teymi. Forskriftir eru öflug leið til að gera aðgerðir sem oft eru gerðar sjálfvirkar.

Bash handrit: upphafið

Svo, ef við tölum um skipanalínuna, gerir það þér kleift að framkvæma nokkrar skipanir í einu með því að slá þær inn aðskildar með semíkommu:

pwd ; whoami

Reyndar, ef þú reyndir þetta í flugstöðinni þinni, hefur fyrsta bash-forritið þitt sem inniheldur tvær skipanir þegar verið skrifað. Þetta virkar svona. Liðið fyrst pwd sýnir upplýsingar um núverandi vinnuskrá, síðan skipunina whoamisýnir upplýsingar um notandann sem þú ert skráður inn sem.

Með því að nota þessa nálgun geturðu sameinað eins margar skipanir og þú vilt á einni línu, einu takmörkin eru hámarksfjöldi röksemda sem hægt er að senda til forritsins. Þú getur skilgreint þessi mörk með því að nota eftirfarandi skipun:

getconf ARG_MAX

Skipanalínan er frábært tól, en þú þarft að slá inn skipanir í hana í hvert skipti sem þú þarft þær. Hvað ef við skrifuðum skipanir í skrá og einfaldlega hringdum í þá skrá til að framkvæma þær? Reyndar er skráin sem við erum að tala um kallað skipanalínuforskrift.

Hvernig bash forskriftir virka

Búðu til tóma skrá með skipuninni touch. Fyrsta línan hennar þarf að gefa til kynna hvaða skel við ætlum að nota. Við höfum áhuga á bash, þannig að fyrsta línan í skránni verður:

#!/bin/bash

Aðrar línur í þessari skrá nota kjötkássa táknið til að gefa til kynna athugasemdir sem skelin vinnur ekki úr. Hins vegar er fyrsta línan sérstakt tilfelli, það er kjötkássa á eftir með upphrópunarmerki (þessi röð er kölluð shebang) og leiðin til bash, gefa til kynna fyrir kerfinu sem handritið var búið til sérstaklega fyrir bash.

Skeljarskipanir eru aðskildar með línustraumi, athugasemdir eru aðskildar með kjötkássamerki. Svona lítur það út:

#!/bin/bash
# This is a comment
pwd
whoami

Hér, rétt eins og á skipanalínunni, er hægt að skrifa skipanir á eina línu, aðskilin með semíkommum. Hins vegar, ef þú skrifar skipanirnar á mismunandi línur, er skráin auðveldari að lesa. Í öllum tilvikum mun skelin vinna úr þeim.

Stillir heimildir handritaskráa

Vistaðu skrána og gefðu henni nafn myscript, og vinnunni við að búa til bash handritið er næstum lokið. Nú er allt sem er eftir að gera þessa skrá keyranlega, annars, ef þú reynir að keyra hana, muntu lenda í villu Permission denied.

Bash handrit: upphafið
Reynir að keyra skriftuskrá með rangt stilltar heimildir

Gerum skrána keyranlega:

chmod +x ./myscript

Nú skulum við reyna að framkvæma það:

./myscript

Eftir að hafa stillt heimildirnar virkar allt eins og það á að gera.

Bash handrit: upphafið
Tókst að keyra bash skriftu

Skilaboðaúttak

Notaðu skipunina til að senda út texta á Linux stjórnborðið echo. Við skulum nota þekkinguna á þessari staðreynd og breyta handritinu okkar, bæta útskýringum við gögnin sem eru framleidd af skipunum sem þegar eru í því:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Þetta er það sem gerist eftir að uppfærða handritið er keyrt.

Bash handrit: upphafið
Senda út skilaboð úr handriti

Nú getum við birt skýringar með því að nota skipunina echo. Ef þú veist ekki hvernig á að breyta skrá með Linux verkfærum, eða þú hefur ekki séð skipunina áður echo, Sjáðu þetta efni.

Að nota breytur

Breytur gera þér kleift að geyma upplýsingar í skriftuskrá, svo sem niðurstöður skipana, til notkunar fyrir aðrar skipanir.

Það er ekkert athugavert við að framkvæma einstakar skipanir án þess að geyma niðurstöður þeirra, en þessi nálgun er frekar takmörkuð í getu sinni.

Það eru tvær tegundir af breytum sem hægt er að nota í bash forskriftum:

  • Umhverfisbreytur
  • Notendabreytur

Umhverfisbreytur

Stundum þurfa skel skipanir að vinna með sumum kerfisgögnum. Hér er dæmi um hvernig á að birta heimaskrá núverandi notanda:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Vinsamlegast athugaðu að við getum notað kerfisbreytu $HOME í tvöföldum gæsalöppum kemur þetta ekki í veg fyrir að kerfið þekki það. Þetta er það sem þú færð ef þú keyrir ofangreinda atburðarás.

Bash handrit: upphafið
Notkun umhverfisbreytu í handriti

Hvað ef þú þarft að sýna dollaramerki á skjánum? Prófum þetta:

echo "I have $1 in my pocket"

Kerfið greinir dollaramerki í tilvitnuðum streng og gerir ráð fyrir að við höfum vísað til breytu. Handritið mun reyna að sýna gildi óskilgreindrar breytu $1. Þetta er ekki það sem við þurfum. Hvað skal gera?

Í þessum aðstæðum, með því að nota flóttastafinn, afturská, áður en dollaramerkið mun hjálpa:

echo "I have $1 in my pocket"

Handritið mun nú gefa út nákvæmlega það sem búist er við.

Bash handrit: upphafið
Notaðu flóttaröð til að prenta dollaramerki

Notendabreytur

Til viðbótar við umhverfisbreytur, leyfa bash forskriftir þér að skilgreina og nota þínar eigin breytur í handritinu. Slíkar breytur halda gildi þar til handritið lýkur framkvæmd.

Eins og með kerfisbreytur er hægt að nálgast notendabreytur með dollaramerkinu:
TNW-CUS-FMP - kynningarkóði fyrir 10% afslátt af þjónustu okkar, hægt að virkja innan 7 daga

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Þetta er það sem gerist eftir að hafa keyrt svona handrit.

Bash handrit: upphafið
Sérsniðnar breytur í skriftu

Skipun á skipun

Einn af gagnlegustu eiginleikum bash forskrifta er hæfileikinn til að draga upplýsingar úr skipunarúttak og úthluta þeim breytum, sem gerir þér kleift að nota þessar upplýsingar hvar sem er í handritaskránni.

Það eru tvær leiðir til að gera þetta.

  • Notaðu afturmerkið "`"
  • Eftir hönnun $()

Þegar þú notar fyrstu aðferðina skaltu gæta þess að setja ekki eina gæsalappa í staðinn fyrir bakmarkið. Skipunin verður að vera umlukin tveimur slíkum táknum:

mydir=`pwd`

Í annarri nálguninni er það sama skrifað svona:

mydir=$(pwd)

Og handritið gæti endað með því að líta svona út:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Meðan á notkun þess stendur, framleiðsla skipunarinnar pwdverður vistað í breytu mydir, þar sem innihaldið er með skipuninni echo, fer í stjórnborðið.

Bash handrit: upphafið
Forskrift sem vistar niðurstöður skipunar í breytu

Stærðfræðilegar aðgerðir

Til að framkvæma stærðfræðilegar aðgerðir í handritaskrá geturðu notað smíði eins og $((a+b)):

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

Bash handrit: upphafið
Stærðfræðilegar aðgerðir í handriti

ef-þá stjórna smíða

Í sumum tilfellum þarftu að stjórna flæði framkvæmdar skipana. Til dæmis, ef ákveðið gildi er meira en fimm, þá þarftu að framkvæma eina aðgerð, annars aðra. Þetta á við í mörgum aðstæðum og hér mun stjórnskipulagið hjálpa okkur if-then. Í sinni einföldustu mynd lítur það svona út:

if команда
then
команды
fi

Hér er virka dæmi:

#!/bin/bash
if pwd
then
echo "It works"
fi

Í þessu tilviki, ef skipunin er framkvæmd pwdlýkur með góðum árangri, textinn „það virkar“ birtist í stjórnborðinu.

Notum þá þekkingu sem við höfum og skrifum flóknara handrit. Segjum að við þurfum að finna ákveðinn notanda í /etc/passwd, og ef þér tókst að finna það, tilkynntu að það sé til.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Þetta er það sem gerist eftir að þetta handrit er keyrt.

Bash handrit: upphafið
Notendaleit

Hér notuðum við skipunina greptil að leita að notanda í skrá /etc/passwd. Ef liðið grepókunnugt þér, lýsingu þess er að finna hér.

Í þessu dæmi, ef notandinn finnst, mun handritið birta samsvarandi skilaboð. Hvað ef notandinn fannst ekki? Í þessu tilviki mun handritið einfaldlega ljúka framkvæmd án þess að segja okkur neitt. Við viljum að hann segi okkur frá þessu líka, svo við munum bæta kóðann.

ef-þá-annar stjórna byggingu

Til þess að forritið geti tilkynnt bæði niðurstöður árangursríkrar leitar og bilunar munum við nota smíðina if-then-else. Svona virkar það:

if команда
then
команды
else
команды
fi

Ef fyrsta skipunin skilar núlli, sem þýðir að hún var keyrð með góðum árangri, verður skilyrðið satt og framkvæmdin mun ekki halda áfram meðfram greininni else. Annars, ef eitthvað annað en núll er skilað, sem myndi gefa til kynna bilun, eða ranga niðurstöðu, skipanirnar eftir else.

Skrifum eftirfarandi handrit:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Aftaka hans fór í vaskinn else.

Bash handrit: upphafið
Keyrir skriftu með ef-þá-annar smíði

Jæja, við skulum halda áfram og spyrja okkur um flóknari aðstæður. Hvað ef þú þarft að athuga ekki eitt skilyrði, heldur nokkur? Til dæmis, ef viðkomandi notandi finnst, ætti að birta ein skilaboð, ef einhver önnur skilyrði eru uppfyllt ætti önnur skilaboð að birtast og svo framvegis. Í slíkum aðstæðum munu hreiður aðstæður hjálpa okkur. Það lítur svona út:

if команда1
then
команды
elif команда2
then
команды
fi

Ef fyrsta skipunin skilar núlli, sem gefur til kynna árangursríka framkvæmd hennar, verða skipanirnar í fyrsta reitnum framkvæmdar then, annars, ef fyrsta skilyrðið er rangt og ef önnur skipunin skilar núlli, verður seinni kóðablokkinn keyrður.

#!/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

Í slíku handriti geturðu til dæmis búið til nýjan notanda með skipuninni useradd, ef leitin skilaði ekki niðurstöðum, eða gerðu eitthvað annað gagnlegt.

Samanburður á tölum

Í skriftum er hægt að bera saman tölugildi. Hér að neðan er listi yfir viðeigandi skipanir.

n1 -eq n2Skilar satt ef n1 jafngildir n2.
n1 -ge n2 Skilar satt ef n1meira eða jafnt n2.
n1 -gt n2Skilar satt ef n1 больше n2.
n1 -le n2Skilar satt ef n1minna eða jafnt n2.
n1 -lt n2Skilar satt ef n1 er minna en n2.
n1 -ne n2Skilar satt ef n1ekki jafnir n2.

Sem dæmi skulum við prófa einn af samanburðartækjunum. Athugið að orðatiltækið er innan hornklofa.

#!/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

Þetta er það sem þessi skipun mun gefa út.

Bash handrit: upphafið
Samanburður á tölum í skriftum

Breytilegt gildi val1meiri en 5, endar útibúið að vera aflífað thensamanburðarstjóra og samsvarandi skilaboð birtast í stjórnborðinu.

Samanburður á strengjum

Forskriftir geta einnig borið saman strengjagildi. Samanburðaraðgerðir líta frekar einfaldar út, en samanburðaraðgerðir strengja hafa ákveðna eiginleika sem við munum snerta hér að neðan. Hér er listi yfir rekstraraðila.

str1 = str2 Prófar strengi fyrir jafnrétti, skilar satt ef strengirnir eru eins.
str1 != str2Skilar satt ef strengirnir eru ekki eins.
str1 < str2Skilar satt ef str1minna en str2.
str1 > str2 Skilar satt ef str1Meira en str2.
-n str1 Skilar satt ef lengd str1Yfir núllinu.
-z str1Skilar satt ef lengd str1jafnt og núll.

Hér er dæmi um að bera saman strengi í handriti:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Sem afleiðing af því að keyra handritið fáum við eftirfarandi.

Bash handrit: upphafið
Samanburður á strengjum í skriftum

Hér er einn eiginleiki strengjasamanburðar sem vert er að minnast á. Það þarf nefnilega að sleppa út ">" og "<" aðgerðunum með skástrik, annars virkar scriptið ekki rétt, þó engin villuboð birtast. Handritið túlkar ">" merkið sem framsendingarskipun úttaks.

Svona lítur vinna með þessum rekstraraðilum út í kóða:

#!/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

Hér eru niðurstöður handritsins.

Bash handrit: upphafið
Samanburður strengja, viðvörun gefin

Vinsamlegast athugaðu að handritið, þó það sé keyrt, gefur út viðvörun:

./myscript: line 5: [: too many arguments

Til að losna við þessa viðvörun, ályktum við $val2 í tvöföldum gæsalöppum:

#!/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

Nú virkar allt eins og það á að gera.

Bash handrit: upphafið
Samanburður á strengjum

Annar eiginleiki ">" og "<" rekstraraðila er hvernig þeir vinna með hástöfum og lágstöfum. Til að skilja þennan eiginleika skulum við útbúa textaskrá með eftirfarandi innihaldi:

Likegeeks
likegeeks

Við skulum vista það með því að gefa því nafn myfile, keyrðu síðan eftirfarandi skipun í flugstöðinni:

sort myfile

Það mun raða línunum úr skránni svona:

likegeeks
Likegeeks

Team sort, sjálfgefið, flokkar strengi í hækkandi röð, það er að lágstafurinn í dæminu okkar er minni en sá hástafi. Nú skulum við undirbúa handrit sem mun bera saman sömu strengi:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Ef þú keyrir það kemur í ljós að allt er á hinn veginn - lágstafurinn er nú stærri en sá stóri.

Bash handrit: upphafið
Flokkunarskipunin og samanburður á strengjum í handritaskrá

Í samanburðarskipunum eru hástafir minni en lágstafir. Strengjasamanburður hér er gerður með því að bera saman ASCII kóða stafanna, röðunin fer því eftir stafakóðum.

Team sort, aftur á móti, notar flokkunarröðina sem tilgreind er í tungumálastillingum kerfisins.

Skráaskoðun

Kannski eru eftirfarandi skipanir oftast notaðar í bash forskriftum. Þeir leyfa þér að athuga ýmis skilyrði varðandi skrár. Hér er listi yfir þessar skipanir.

-d fileAthugar hvort skrá sé til og sé skrá.
-e fileAthugar hvort skráin sé til.
-f file Athugar hvort skrá sé til og sé skrá.
-r fileAthugar hvort skráin sé til og sé læsileg.
-s file ПAthugar hvort skráin sé til og sé ekki tóm.
-w fileAthugar hvort skráin sé til og sé skrifanleg.
-x fileAthugar hvort skráin sé til og sé keyranleg.
file1 -nt file2 Athugar hvort það sé nýrra file1en file2.
file1 -ot file2Athugar ef eldra file1en file2.
-O file Athugar hvort skráin sé til og sé í eigu núverandi notanda.
-G fileAthugar hvort skráin sé til og hvort hópauðkenni hennar passi við hópauðkenni núverandi notanda.

Þessar skipanir, sem og margar aðrar sem fjallað er um í dag, er auðvelt að muna. Nöfn þeirra, sem eru skammstafanir á ýmsum orðum, gefa beint til kynna hvaða athuganir þeir framkvæma.

Prófum eina af skipunum í reynd:

#!/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

Þetta handrit, fyrir núverandi möppu, mun birta innihald hennar.

Bash handrit: upphafið
Listi yfir innihald möppu

Við trúum því að þú getir gert tilraunir með skipanirnar sem eftir eru sjálfur; þær eru allar notaðar samkvæmt sömu reglu.

Niðurstöður

Í dag ræddum við um hvernig á að byrja að skrifa bash-handrit og fórum yfir nokkur grundvallaratriði. Reyndar er efni bash forritun risastórt. Þessi grein er þýðing á fyrsta hluta af stórri röð 11 efna. Ef þú vilt halda áfram núna, hér er listi yfir frumrit þessara efna. Til hægðarauka fylgir þýðingin sem þú varst að lesa af hér.

  1. Bash Script skref fyrir skref — hér erum við að tala um hvernig á að byrja að búa til bash forskriftir, notkun breytu er skoðuð, skilyrtum byggingum, útreikningum, samanburði á tölum, strengjum og að finna upplýsingar um skrár er lýst.
  2. Bash Scripting Part 2, Bash the awesome — hér koma í ljós eiginleikar þess að vinna með fyrir og á meðan lykkjur.
  3. Bash Scripting Part 3, færibreytur og valkostir — þetta efni er tileinkað skipanalínubreytum og lyklum sem hægt er að senda í forskriftir, vinna með gögn sem notandinn slær inn og sem hægt er að lesa úr skrám.
  4. Bash Scripting Part 4, Input & Output - hér erum við að tala um skráarlýsingar og að vinna með þá, um inntak, úttak, villustrauma og um tilvísun úttaks.
  5. Bash Scripting Part 5, Sighals & Jobs — þetta efni er varið til Linux merkja, vinnslu þeirra í forskriftum og ræsingu forskrifta á áætlun.
  6. Bash Scripting Part 6, Aðgerðir — hér geturðu lært um að búa til og nota aðgerðir í forskriftum og þróa bókasöfn.
  7. Bash Scripting Part 7, Using sed — þessi grein er helguð því að vinna með sed streymistextaritlinum.
  8. Bash Scripting Part 8, Using awk — þetta efni er varið til forritunar á awk gagnavinnslumálinu.
  9. Bash Scripting Part 9, Regular Expressions — hér geturðu lesið um notkun reglulegra orðasamtaka í bash skriftum.
  10. Bash Scripting Part 10, Hagnýt dæmi — hér eru aðferðir til að vinna með skilaboð sem hægt er að senda til notenda, sem og aðferð til að fylgjast með diskum.
  11. Bash Scripting Part 11, Expect Command — þetta efni er tileinkað Expect tólinu, sem þú getur gert sjálfvirk samskipti við gagnvirk tól með. Sérstaklega erum við að tala um væntanleg handrit og samskipti þeirra við bash forskriftir og önnur forrit.

Við teljum að einn af dýrmætu eiginleikum þessarar greinaflokka sé að byrja frá því einfaldasta, hentugur fyrir notendur á hvaða stigi sem er, leiðir það smám saman að nokkuð alvarlegum efnum, sem gefur öllum tækifæri til að komast áfram í gerð Linux skipanalínuforskrifta. .

Kæru lesendur! Við biðjum bash forritunargúrúa að tala um hvernig þeir náðu hæðum meistaranna, deila leyndarmálum sínum og við hlökkum til að fá birtingar frá þeim sem eru nýbúnir að skrifa sitt fyrsta handrit.

Bash handrit: upphafið

Aðeins skráðir notendur geta tekið þátt í könnuninni. Skráðu þig inn, takk.

Ætti ég að þýða restina af greinaröðinni?

  • Já!

  • Nei engin þörf

1030 notendur kusu. 106 notendur sátu hjá.

Heimild: www.habr.com

Bæta við athugasemd