til sikker vores begreber Vi lærer 2 meget nyttige værktøjer til programmering, der fungerer perfekt i Bash. Lær at skabe funciones og definere rørledninger kan synes komplekse i starten, men så vil vi se det enorme utilidad at de giver os. |
Rør
Specifikt og uden at tage for mange drejninger, er et rør en metode, der tillader at dirigere output fra en proces som input af en anden, hvilket giver mulighed for en række fordele, såsom at reducere kodelinjer, dispensere med lagringsvariabler for resultater og forbedre effektiviteten af scriptet.
Et rør genkendes generelt ved at have symbolet | der gør det muligt at sammenkæde udtryk; Selvom det bruges som standard, er der andre måder at oprette rør på.
Eksempel: udskriv nylige kernelmeddelelser
#dmesg giver dig mulighed for at se nylige kernemeddelelser og indlæste drivere # under systemstart; hale udskriver de sidste dele af en fil eller #command
dmesg | hale
Selvom de kan være komplicerede så meget, som vi vil, tillader den grundlæggende struktur i en rørledning, at resultatet af en kommando kan bruges som input til den næste, som kan give input til en ny kommando, hvis vi fortsætter med at tilføje på hinanden følgende rør.
funktioner
Funktioner er et sæt udsagn, der er grupperet sammen, så de kan udføres flere gange uden at skulle omskrive dem. Det svarer til at tænke, at når vi lærer at tilberede en type mad, vil vi skrive opskriften på et ark, og hver gang vi vil tilberede den mad, konsulterer vi opskriften i stedet for at omskrive et nyt ark med den samme opskrift.
Måske er det vigtigste ved funktioner muligheden for at videregive parametre, data, som de vil bruge til at behandle dem og generere et output. Dens struktur er som følger:
funktion funktionsnavn {
processer
}
Eksempel: funktion, der viser de tjenester, der fungerer på TCP-protokollen. Vi kan også se, hvordan man anvender flere rør.
# Vi definerer et funktionsnavn, det kan være det, vi kan lide.
funktion services_tcp {
#cat sammenkæder og viser indholdet af mappen / etc / services, som er #, der indeholder alle tjenesterne med deres tilknyttede porte.
# den første grep tager listen og fjerner kommentarerne, med –v vi inverterer resultatet
# den anden grep viser kun dem, der er relateret til tcp
kat / etc / tjenester | grep –v "^ #" | grep tcp
}
Når vi har brug for at udføre denne funktion, skal vi bare kalde den ved dens navn:
tcp_services
I dette tilfælde fungerer det uden parametre; I tilfælde af at den har dem, skal vi tilføje dem, så funktionen fungerer korrekt, ellers fungerer funktionen ikke korrekt. Brug af retur giver en funktion mulighed for at returnere en værdi som et resultat af processen.
Eksempel: funktion med inputparametre, der beregner summen af 2 tal.
#! / Bin / bash
funktionssum ()
{
# med lad kan vi udføre operationen inde i tilbudene
lad "resultat = $ 1 + $ 2"
#return giver mulighed for at returnere heltalets værdi. Når afkastet er udført, vil værdien blive deponeret inde i variablen $?
returnere $ resultat;
}
#Funktionen sum kaldes, og vi videregiver 2 inputparametre.
tilføj 2 3
#prints værdien af $? med ekko, der vurderer den aktuelle værdi af variablen i anførselstegn
ekko -e "Resultat = $?";
Jeg er ikke sikker, men returneringserklæringen for funktionerne bruges kun til at returnere et heltal mellem 0 og 255, ligesom fejlkoderne "exit", generelt 0, hvis alt er i orden og et andet nummer for de andre tilfælde. Selvom dette i eksemplet fungerer, synes jeg ikke det er en god praksis at returnere resultatet med retur.
Derovre siger jeg en vrøvl hej! øje! ha!
Sandheden efterlod mig tvivlen. For at undgå problemer med funktionerne kan vi under alle omstændigheder erstatte returneringen med ekko i tilfælde af, at funktionen søger at returnere eller udskrive en værdi eller streng.
Det er sandt, for at løse dette kan du bruge kommandoen bc, i sumfunktionen kan du bruge: resultat = `echo $ 1 + $ 2 | bc -ql`
god,
Jeg vil gerne vide, hvor jeg kan gemme bash-filerne til at køre hele systemet, og det er ikke bin-biblioteket, men kan være hjemsted for sikkerhedskopiering.
Tak og hilsen.
Mange tak, jeg begynder med manuskripterne, og sandheden er, at dette er meget nyttigt, du er meget venlig og deler din viden!
hilsen
Tak skal du have! Kram!
Paul
Syntaksfejl: "(" uventet
Jeg får en fejl, når jeg prøver at køre eksemplet, jeg kopierede det nøjagtigt det samme
Hvad kan der være? Jeg er på Ubuntu 14.10