Bash scripts: begin

Bash scripts: begin
Bash Scripts Deel 2: Loops
Bash-skrifte, deel 3: opdragreëlopsies en skakelaars
Bash-skrifte, deel 4: invoer en uitvoer
Bash-skrifte, deel 5: seine, agtergrondtake, skrifbestuur
Bash Scripts, Deel 6: Funksies en Biblioteekontwikkeling
Bash scripts, deel 7: sed en woordverwerking
Bash Scripts, Deel 8: The awk Data Processing Language
Bash Scripts Deel 9: Gereelde uitdrukkings
Bash Scripts Deel 10: Praktiese voorbeelde
Bash-skrifte, deel 11: verwag en outomatisering van interaktiewe nutsprogramme

Vandag sal ons praat oor bash-skrifte. Hierdie - opdragreëlskrifte, geskryf vir die bash-dop. Daar is ander skulpe, soos zsh, tcsh, ksh, maar ons sal op bash fokus. Hierdie materiaal is bedoel vir almal, die enigste voorwaarde is die vermoë om in te werk bevelreël Linux.

Bash scripts: begin

Opdragreëlskrifte is stelle van dieselfde opdragte wat vanaf die sleutelbord ingevoer kan word, in lêers versamel en deur een of ander gemeenskaplike doel verenig kan word. Terselfdertyd kan die resultate van die spanne se werk óf van onafhanklike waarde wees óf as insette vir ander spanne dien. Skripte is 'n kragtige manier om handelinge wat gereeld uitgevoer word te outomatiseer.

Bash scripts: begin

Dus, as ons oor die opdragreël praat, laat dit jou toe om verskeie opdragte gelyktydig uit te voer deur hulle met 'n kommapunt in te voer:

pwd ; whoami

Trouens, as jy dit in jou terminaal probeer het, is jou eerste bash script wat twee opdragte gebruik reeds geskryf. Dit werk so. Span eerste pwd vertoon inligting oor die huidige werkgids, dan die opdrag whoamiwys inligting oor die gebruiker as jy aangemeld is.

Deur hierdie benadering te gebruik, kan jy soveel opdragte kombineer as wat jy wil op een reël, die limiet is slegs die maksimum aantal argumente wat na die program deurgegee kan word. U kan hierdie limiet definieer met die volgende opdrag:

getconf ARG_MAX

Die opdragreël is 'n wonderlike hulpmiddel, maar jy moet opdragte daarin invoer elke keer as jy dit nodig het. Wat as ons 'n stel opdragte na 'n lêer skryf en bloot daardie lêer oproep om dit uit te voer? Trouens, die lêer waaroor ons praat, word die opdragreëlskrif genoem.

Hoe bash scripts werk

Skep 'n leë lêer met die opdrag touch. In die eerste reël moet u spesifiseer watter dop ons gaan gebruik. Ons stel belang in bash, so die eerste reël van die lêer sal wees:

#!/bin/bash

Elders in hierdie lêer word die hash-simbool gebruik om opmerkings aan te dui wat die dop nie verwerk nie. Die eerste reël is egter 'n spesiale geval, dit is 'n pondteken gevolg deur 'n uitroepteken (hierdie ry word genoem shebang) en die pad na bash, dui aan die stelsel waarvoor die skrif spesifiek geskep is bash.

Shell-opdragte word geskei deur 'n lynvoer, opmerkings word geskei deur 'n skutteken. Hier is hoe dit lyk:

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

Hier, net soos op die opdragreël, kan jy opdragte op een reël skryf en dit met 'n kommapunt skei. As jy egter opdragte op verskillende reëls skryf, is die lêer makliker om te lees. In elk geval sal die dop hulle verwerk.

Stel toestemmings op 'n skriplêer

Stoor die lêer deur dit 'n naam te gee myscript, en die bash script is amper klaar. Nou bly dit net om hierdie lêer uitvoerbaar te maak, anders sal jy 'n fout teëkom wanneer jy dit probeer uitvoer Permission denied.

Bash scripts: begin
Poging om 'n skriplêer met verkeerd gekonfigureerde toestemmings te laat loop

Kom ons maak die lêer uitvoerbaar:

chmod +x ./myscript

Kom ons probeer dit nou uitvoer:

./myscript

Nadat u die toestemmings gestel het, werk alles soos dit moet.

Bash scripts: begin
Begin bash script suksesvol

Boodskapuitvoer

Om teks na die Linux-konsole te druk, gebruik die opdrag echo. Kom ons gebruik die kennis van hierdie feit en wysig ons skrif, en voeg verduidelikings by die data wat die opdragte reeds daarin uitvoer:

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

Hier is wat gebeur nadat die opgedateerde skrip uitgevoer is.

Bash scripts: begin
Uitvoer van boodskappe vanaf 'n skrif

Nou kan ons verduidelikende byskrifte vertoon deur die opdrag te gebruik echo. As jy nie weet hoe om 'n lêer met Linux-nutsmiddels te redigeer nie, of as jy nog nie die opdrag gesien het nie echo, gaan kyk na hierdie die dinge.

Gebruik veranderlikes

Veranderlikes laat jou toe om inligting in 'n skriplêer te stoor, soos die resultate van opdragte, vir gebruik deur ander opdragte.

Daar is niks verkeerd om individuele opdragte uit te voer sonder om die resultate van hul werk te stoor nie, maar die moontlikhede van hierdie benadering is baie beperk.

Daar is twee tipes veranderlikes wat in bash-skrifte gebruik kan word:

  • omgewings veranderlikes
  • Gebruiker veranderlikes

omgewings veranderlikes

Soms moet dopopdragte met sommige stelseldata werk. Byvoorbeeld, hier is hoe om die huidige gebruiker se tuisgids te vertoon:

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

Neem asseblief kennis dat ons die stelselveranderlike kan gebruik $HOME in dubbele aanhalingstekens, sal dit nie verhoed dat die stelsel dit herken nie. Hier is wat gebeur as jy die bogenoemde skrif uitvoer.

Bash scripts: begin
Die gebruik van 'n omgewingsveranderlike in 'n skrif

Maar wat as jy 'n dollarteken wil vertoon? Kom ons probeer dit:

echo "I have $1 in my pocket"

Die stelsel sal 'n dollarteken opspoor in 'n string wat deur aanhalingstekens afgebaken word en aanvaar dat ons 'n veranderlike verwys het. Die skrip sal probeer om die waarde van 'n ongedefinieerde veranderlike te vertoon. $1. Dit is nie wat ons nodig het nie. Wat om te doen?

In 'n situasie soos hierdie help die gebruik van die agterste skuinsbeheerkarakter voor die dollarteken:

echo "I have $1 in my pocket"

Die skrif sal nou presies uitvoer wat verwag word.

Bash scripts: begin
Gebruik 'n ontsnappingsreeks om 'n dollarteken uit te voer

Gebruiker veranderlikes

Benewens omgewingsveranderlikes, laat bash-skrifte jou toe om jou eie veranderlikes in die skrif te stel en te gebruik. Sulke veranderlikes hou 'n waarde totdat die skrif eindig.

Soos met stelselveranderlikes, kan gebruikerveranderlikes verkry word deur die dollarteken te gebruik:
TNW-CUS-FMP - promosiekode vir 'n 10% afslag op ons dienste, beskikbaar vir aktivering binne 7 dae

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

Hier is wat gebeur nadat jy so 'n skrip uitgevoer het.

Bash scripts: begin
Pasgemaakte veranderlikes in Skrip

Bevelvervanging

Een van die nuttigste kenmerke van bash-skrifte is die vermoë om inligting uit die uitvoer van opdragte te onttrek en dit aan veranderlikes toe te wys, wat jou toelaat om hierdie inligting oral in die skriflêer te gebruik.

Dit kan op twee maniere gedoen word.

  • Met die terugmerkkarakter "`"
  • Met die hulp van konstruksie $()

Wanneer jy die eerste benadering gebruik, wees versigtig om nie 'n enkele aanhaling in plaas van 'n terugmerk te gebruik nie. Die opdrag moet in twee sulke ikone ingesluit word:

mydir=`pwd`

In die tweede benadering word dieselfde so geskryf:

mydir=$(pwd)

En die draaiboek kan op die ou end so lyk:

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

Tydens sy werking, die uitvoer van die opdrag pwdsal in 'n veranderlike gestoor word mydir, waarvan die inhoud, met behulp van die opdrag echo, sal na die konsole gaan.

Bash scripts: begin
Skrip wat die resultate van die opdrag in 'n veranderlike stoor

Wiskundige bewerkings

Om wiskundige bewerkings in 'n skriflêer uit te voer, kan jy 'n konstruksie van die vorm gebruik $((a+b)):

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

Bash scripts: begin
Wiskundige bewerkings in 'n skrif

as-dan beheerstruktuur

In sommige scenario's is dit nodig om die vloei van opdraguitvoering te beheer. Byvoorbeeld, as 'n sekere waarde groter as vyf is, moet een aksie uitgevoer word, anders 'n ander. Dit is van toepassing in baie situasies, en hier sal die beheerstruktuur ons help if-then. In sy eenvoudigste vorm lyk dit soos volg:

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

En hier is 'n werkende voorbeeld:

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

In hierdie geval, as die uitvoering van die opdrag pwdsuksesvol voltooi is, sal die teks "dit werk" in die konsole vertoon word.

Kom ons gebruik die kennis wat ons het en skryf 'n meer komplekse scenario. Kom ons sê ons moet 'n gebruiker in vind /etc/passwd, en as dit gevind is, rapporteer dat dit bestaan.

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

Dit is wat gebeur nadat hierdie skrip uitgevoer is.

Bash scripts: begin
Gebruikerssoektog

Hier het ons die opdrag gebruik grepom na 'n gebruiker in 'n lêer te soek /etc/passwd. As die span greponbekend aan jou, kan die beskrywing daarvan gevind word hier.

In hierdie voorbeeld, as die gebruiker gevind word, sal die skrif 'n toepaslike boodskap vertoon. Wat as die gebruiker nie gevind kon word nie? In hierdie geval sal die skrif eenvoudig die uitvoering voltooi sonder om ons iets te vertel. Ek wil graag hê hy moet ons ook hiervan vertel, so kom ons verbeter die kode.

Die as-dan-else-beheerkonstruksie

Om die program beide die resultate van 'n suksesvolle soektog en 'n mislukking te kan rapporteer, gebruik ons ​​die konstruksie if-then-else. Hier is hoe dit opgestel is:

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

As die eerste opdrag nul gee, wat beteken dat dit suksesvol uitgevoer is, sal die voorwaarde waar wees en die uitvoering sal nie langs die tak gaan nie else. Andersins, as iets anders as nul teruggestuur word, wat mislukking beteken, of 'n vals resultaat, die opdragte na else.

Kom ons skryf die volgende skrif:

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

Sy teregstelling het afgegaan else.

Bash scripts: begin
Begin 'n skrip met 'n if-then-else-konstruksie

Wel, kom ons gaan aan en vra onsself af oor moeiliker toestande. Wat as jy nie een toestand moet nagaan nie, maar verskeie? Byvoorbeeld, as die vereiste gebruiker gevind word, moet een boodskap vertoon word, as daar aan 'n ander voorwaarde voldoen word, moet 'n ander boodskap vertoon word, ensovoorts. In so 'n situasie sal geneste toestande ons help. Dit lyk so:

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

As die eerste opdrag nul gee, wat die suksesvolle uitvoering daarvan aandui, sal die opdragte in die eerste blok uitgevoer word then, anders, as die eerste voorwaarde vals is, en as die tweede opdrag nul gee, sal die tweede blok kode uitgevoer word.

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

In so 'n skrif kan jy byvoorbeeld 'n nuwe gebruiker skep deur die opdrag te gebruik useradd, as die soektog geen resultate opgelewer het nie, of doen iets anders nuttig.

Getalvergelyking

In skrifte kan jy numeriese waardes vergelyk. Hieronder is 'n lys van relevante opdragte.

n1 -eq n2Wys waar as n1 ewe veel n2.
n1 -ge n2 Wys waar as n1meer of gelyk n2.
n1 -gt n2Wys waar as n1 beter n2.
n1 -le n2Wys waar as n1minder of gelyk n2.
n1 -lt n2Wys waar as n1 minder is as n2.
n1 -ne n2Wys waar as n1nie gelyk nie n2.

As voorbeeld, kom ons probeer een van die vergelykingsoperateurs. Let daarop dat die uitdrukking tussen vierkantige hakies ingesluit is.

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

Hier is wat hierdie opdrag sal uitvoer.

Bash scripts: begin
Vergelyk getalle in skrifte

Veranderlike waarde val1groter as 5, uiteindelik word die tak uitgevoer thenvergelykingsoperateur en die ooreenstemmende boodskap word in die konsole vertoon.

String vergelyking

Skripte kan ook stringwaardes vergelyk. Vergelykingsoperateurs lyk redelik eenvoudig, maar stringvergelykingsoperateurs het sekere eienaardighede, wat ons hieronder sal aanraak. Hier is 'n lys van operateurs.

str1 = str2 Toets stringe vir gelykheid, gee waar as stringe identies is.
str1 != str2Wys waar as die stringe nie identies is nie.
str1 < str2Wys waar as str1minder as str2.
str1 > str2 Wys waar as str1meer as str2.
-n str1 Wys waar as lengte str1Bo nul.
-z str1Wys waar as lengte str1gelyk aan nul.

Hier is 'n voorbeeld van 'n string vergelyking in 'n skrif:

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

As gevolg van die skrifuitvoering kry ons die volgende.

Bash scripts: begin
Stringvergelyking in skrifte

Hier is een kenmerk van stringvergelyking wat die moeite werd is om te noem. Die ">" en "<" operateurs moet naamlik ontsnap word met 'n terugskuinsstreep, anders sal die skrif nie reg werk nie, alhoewel geen foutboodskappe sal verskyn nie. Die skrif interpreteer die ">" teken as 'n opdrag om uitset te herlei.

Hier is hoe werk met hierdie operateurs in kode lyk:

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

Hier is die resultate van die draaiboek.

Bash scripts: begin
Snaar vergelyking, waarskuwing gegooi

Let daarop dat die skrip, alhoewel dit uitgevoer word, 'n waarskuwing gee:

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

Om van hierdie waarskuwing ontslae te raak, sluit ons af $val2 in dubbele aanhalingstekens:

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

Nou werk alles soos dit moet.

Bash scripts: begin
String vergelyking

Nog 'n kenmerk van die ">" en "<" operateurs is hoe hulle werk met hoofletters en kleinletters. Om hierdie kenmerk te verstaan, kom ons berei 'n tekslêer voor met die volgende inhoud:

Likegeeks
likegeeks

Stoor dit met 'n naam myfileen voer dan die volgende opdrag in die terminaal uit:

sort myfile

Dit sal die lyne van die lêer soos volg sorteer:

likegeeks
Likegeeks

Span sort, sorteer by verstek stringe in stygende volgorde, wat beteken dat die kleinletter in ons voorbeeld minder as die hoofletter is. Kom ons berei nou 'n skrif voor wat dieselfde stringe sal vergelyk:

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

As jy dit hardloop, blyk dit dat die teenoorgestelde waar is - die kleinletter is nou groter as die hoofletter.

Bash scripts: begin
sorteer opdrag en string vergelyking in script lêer

In vergelykende opdragte is hoofletters kleiner as kleinletters. Stringvergelyking word hier gedoen deur die ASCII-karakterkodes te vergelyk, die sorteervolgorde is dus afhanklik van die karakterkodes.

Span sort, gebruik op sy beurt die sorteervolgorde wat in die stelseltaalinstellings gespesifiseer word.

Lêerkontroles

Miskien word die opdragte hieronder die meeste in bash-skrifte gebruik. Hulle laat jou toe om verskeie voorwaardes rakende lêers na te gaan. Hier is 'n lys van hierdie opdragte.

-d fileKontroleer of 'n lêer bestaan ​​en of dit 'n gids is.
-e fileKontroleer of 'n lêer bestaan.
-f file Kontroleer of 'n lêer bestaan ​​en of dit 'n lêer is.
-r fileKontroleer of die lêer bestaan ​​en leesbaar is.
-s file ПKontroleer of die lêer bestaan ​​en nie leeg is nie.
-w fileKontroleer of die lêer bestaan ​​en skryfbaar is.
-x fileKontroleer of 'n lêer bestaan ​​en uitvoerbaar is.
file1 -nt file2 Kyk of dit nuwer is file1as file2.
file1 -ot file2Kontroleer as ouer file1as file2.
-O file Kontroleer of die lêer bestaan ​​en deur die huidige gebruiker besit word.
-G fileKontroleer of die lêer bestaan ​​en of sy groep-ID ooreenstem met die huidige gebruiker se groep-ID.

Hierdie opdragte, sowel as baie ander wat vandag bespreek word, is maklik om te onthou. Hulle name, wat afkortings vir verskeie woorde is, dui direk die kontroles aan wat hulle uitvoer.

Kom ons probeer een van die opdragte in die praktyk:

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

Hierdie skrif, vir 'n bestaande gids, sal die inhoud daarvan vertoon.

Bash scripts: begin
Lys die inhoud van 'n gids

Ons glo dat jy met die res van die opdragte op jou eie kan eksperimenteer, hulle geld almal volgens dieselfde beginsel.

Resultate van

Vandag het ons gepraat oor hoe om te begin om bash-skrifte te skryf en 'n paar basiese dinge gedek. Trouens, die onderwerp van bash-programmering is groot. Hierdie artikel is 'n vertaling van die eerste deel van 'n groot reeks van 11 materiaal. As jy nou wil voortgaan, hier is 'n lys van die oorspronklikes van hierdie materiaal. Gerieflikheidshalwe is die een wie se vertaling jy pas gelees het hier ingesluit.

  1. Bash Script Stap Vir Stap - hier praat ons oor hoe om bash-skrifte te begin skep, die gebruik van veranderlikes word oorweeg, voorwaardelike konstruksies, berekeninge, vergelykings van getalle, stringe, om inligting oor lêers uit te vind, word beskryf.
  2. Bash Scripting Deel 2, Bash the awesome - hier word die kenmerke van werk met vir en terwyl lusse geopenbaar.
  3. Bash Scripting Deel 3, Parameters en opsies - hierdie materiaal word gewy aan opdragreëlparameters en sleutels wat na skrifte deurgegee kan word, werk met data wat die gebruiker invoer en wat uit lêers gelees kan word.
  4. Bash Scripting Deel 4, Invoer en Uitvoer - hier praat ons van lêerbeskrywers en om daarmee saam te werk, oor invoer, uitvoer, foute, uitsetherleidingstrome.
  5. Bash Scripting Deel 5, Sighals & Jobs - hierdie materiaal is opgedra aan Linux-seine, hul verwerking in skrifte, geskeduleerde skrifbekendstelling.
  6. Bash Scripting Deel 6, Funksies - hier kan jy leer oor die skep en gebruik van funksies in skrifte, oor die ontwikkeling van biblioteke.
  7. Bash Scripting Deel 7, Gebruik sed - hierdie artikel handel oor die werk met die sed stream teksredigeerder.
  8. Bash Scripting Deel 8, Gebruik awk — hierdie materiaal word gewy aan programmering in die awk-dataverwerkingstaal.
  9. Bash Scripting Deel 9, Gereelde uitdrukkings - hier kan jy lees oor die gebruik van gereelde uitdrukkings in bash-skrifte.
  10. Bash Scripting Deel 10, Praktiese voorbeelde - hier is metodes om met boodskappe te werk wat aan gebruikers gestuur kan word, sowel as 'n metode om die skyf te monitor.
  11. Bash Scripting Deel 11, Expect Command - hierdie materiaal is gewy aan die Verwag-instrument, waarmee u interaksie met interaktiewe nutsprogramme kan outomatiseer. Dit gaan veral oor verwag-skripte en hoe hulle met bash-skrifte en ander programme omgaan.

Ons dink dat een van die wonderlike dinge van hierdie reeks artikels is dat dit begin van die mees basiese, geskik vir gebruikers van enige vlak, geleidelik lei tot redelik ernstige onderwerpe, wat almal 'n kans gee om te vorder in Linux-opdragreël-skrip.

Liewe lesers! Ons vra bash-programmering ghoeroes om te praat oor hoe hulle tot die hoogtes van bemeestering gekom het, geheime deel, en ons wag vir indrukke van diegene wat pas hul eerste draaiboek geskryf het.

Bash scripts: begin

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Vertaal die res van die reeks artikels?

  • Ja!

  • Nee nie nodig nie

1030 gebruikers het gestem. 106 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking