Bash Scripting-zelfstudie voor beginners

Bash Scripting Tutorial



De standaard commandotaal van Linux is Bash-script. We moeten voor veel doeleinden dagelijks veel opdrachten in Linux uitvoeren. Deze dagelijkse taken kunnen worden geautomatiseerd met behulp van een bash-script. Elke gebruiker kan deze scripttaal heel gemakkelijk en snel leren. Als je nieuw bent in bash-programmeren, dan is deze tutorial iets voor jou.

Inhoud:

  1. Opmerkingen
  2. echo Commando
  3. Variabelen
  4. Voorwaardelijke verklaring
  5. lussen
  6. Functies
  7. Programma's aanroepen in een script
  8. Menu's maken
  9. Opdrachtregelverwerking
  10. Rekenkundig
  11. String manipulatie
  12. Return-codes van een script retourneren en in een ander script vangen
  13. Lezen en schrijven naar bestanden
  14. pijpen

Opmerkingen

Het toevoegen van opmerkingen met de code is een essentieel onderdeel van elke programmeertaal. De opmerkingen worden niet geparseerd met het script op het moment van uitvoering. De lezer kan elke code goed begrijpen als de code goed is becommentarieerd. U kunt een opmerking op meerdere manieren toevoegen in bash-script. Hoe u enkelregelige en meerregelige opmerkingen in een bash-script kunt toevoegen, wordt in dit deel getoond. Maak een bash-bestand met het volgende script om het gebruik van bash-commentaar te kennen. Hier wordt het '#'-symbool gebruikt voor het toevoegen van een opmerking van één regel en een enkel aanhalingsteken (') met ':' wordt gebruikt voor het toevoegen van opmerkingen met meerdere regels.







bash_comment.sh



#!/bin/bash
#Neem een ​​getal als invoer
gooide uit 'Voer een nummer in'
lezentot
:'
Controleer of het invoernummer is
kleiner dan 10 of groter dan 10 of gelijk aan 10
'

indien [[ $ a -lt 10 ]]
dan
gooide uit 'Het aantal is minder dan 10'
elif [[ $ a -gt 10 ]]
dan
gooide uit 'Het getal is groter dan 10'
anders
gooide uit 'Het getal is gelijk aan 10'
zijn

Uitgang:



Voer het script uit.





$bashbash_comment.sh

Hier wordt het script drie keer uitgevoerd met de invoerwaarde 3, 10 en 90. De volgende uitvoer verschijnt.



Als je meer wilt weten over bash-commentaar, kijk dan op deze tutorial .

Ga naar boven

echo commando

Het `echo`-commando wordt in bash gebruikt om uitvoer in de terminal af te drukken. Verschillende opties kunnen worden gebruikt met het echo-commando in bash om de uitvoer op verschillende manieren af ​​te drukken. Maak een bash-bestand met het volgende script om de twee eenvoudige toepassingen van het `echo`-commando te kennen. Hier zal het eerste `echo`-commando een eenvoudige tekst met een nieuwe regel afdrukken en het tweede echo-commando een eenvoudige tekst zonder een nieuwe regel.

echo_test.sh

#!/bin/bash
#Print de eerste tekst
gooide uit 'Tekst afdrukken met een nieuwe regel'
#Print de tweede tekst
gooide uit -N 'Tekst afdrukken zonder nieuwe regel'

Uitgang:

Voer het script uit.

$bashecho_test.sh

De volgende uitvoer zal verschijnen na het uitvoeren van de bovenstaande opdracht.

Er zijn veel andere toepassingen van het `echo`-commando in bash. U kunt deze tutorial raadplegen om meer te weten te komen over het `echo`-commando.

Ga naar boven

Variabelen

Variabeledeclaratie is een noodzakelijk onderdeel van elke programmeertaal. Bash-variabelen kunnen op verschillende manieren worden gedeclareerd. Wanneer een waarde wordt toegekend in een variabele dan wordt er geen symbool gebruikt aan het begin van de variabele. '$'-symbool wordt gebruikt met de naam van de variabele op het moment dat de waarde van de variabele wordt gelezen. Variabele kan worden gebruikt vanaf de terminal of kan in elk bash-script worden gebruikt.

De volgende commando's declareren een stringvariabele met de naam mystr met een bepaalde waarde en print vervolgens de waarde van de variabele in de terminal.

$mystr='Ik hou van bash-programmering'
$gooide uit $mystr

Uitgang:

Maak een bash-bestand met het volgende script. Hier worden twee variabelen gedeclareerd. Dit zijn $ a en $ b . Als de invoerwaarde die is opgeslagen in $ a is gelijk aan $ b dan het bericht, Cijfers zijn gelijk wordt anders afgedrukt Cijfers zijn niet gelijk zal worden afgedrukt.

var.sh

#!/bin/bash
gooide uit 'Voer een nummer in'
lezentot
B=100
indien [[ $ a -eq $ b ]]
dan
gooide uit 'Cijfers zijn gelijk'
anders
gooide uit 'Cijfers zijn niet gelijk'
zijn

Uitgang:

Voer het script uit.

$bashvar.sh

Bovenstaand commando wordt twee keer uitgevoerd met de waarde 56 en 100. De volgende uitvoer verschijnt.

Als je meer wilt weten over bash-variabelen, kijk dan op: deze tutorial .

Ga naar boven

Voorwaardelijke verklaring

Net als een andere programmeertaal, kun je een voorwaardelijke instructie in bash gebruiken. ‘ Als dan anders ' en ' geval '-statements worden voornamelijk gebruikt voor het implementeren van condition-statements in elke programmeertaal. Het gebruik van een voorwaardelijke instructie met behulp van 'indien' verklaring wordt weergegeven in dit gedeelte van deze zelfstudie. Maak een bash-bestand met het volgende script waarin een voorwaardelijke instructie wordt gebruikt. Hier worden twee waarden van de gebruiker als invoer genomen en opgeslagen in de variabelen, $code , en $leeftijd . 'if'-statement wordt gebruikt om de waarde van te controleren $leeftijd is groter dan of gelijk aan 18 en de waarde van de $code is 1100 . Als beide voorwaarden waar zijn, dan is het bericht, Je komt in aanmerking om de film te zien wordt anders afgedrukt Je komt niet in aanmerking om de film te zien zal worden afgedrukt.

cond.sh

#!/bin/bash

gooide uit 'Voer je code in'
lezencode
gooide uit 'Vul je leeftijd in'
lezenleeftijd

indien [[ $leeftijd -schenken 18 && $code -eq '1100' ]]
dan
gooide uit 'Je komt in aanmerking om de film te zien'
anders
gooide uit 'Je komt niet in aanmerking om de film te zien'
zijn

Uitgang:

Voer het script uit.

$bashcond.sh

De volgende uitvoer verschijnt na het nemen van verschillende invoerwaarden. 1100 wordt gegeven als een code en 5 wordt gegeven als leeftijd voor de eerste uitvoering en als de voorwaarde false retourneert voor deze waarden. 1100 wordt gegeven als een code en 45 wordt gegeven als leeftijd voor de tweede uitvoering die true retourneert voor if-conditie.

Als je meer wilt weten over bash conditional statement, kun je deze tutorial bekijken.

Ga naar boven

lussen

Wanneer sommige delen van het script meerdere keren moeten worden uitgevoerd, wordt de lus gebruikt om de taak uit te voeren. Bash ondersteunt drie soorten lussendeclaraties, net als andere talen. Deze zijn voor, terwijl en tot lussen. Op basis van de programmeervereisten wordt een bepaalde lus in het script gebruikt. Het gebruik van deze drie soorten lussen wordt in deze sectie getoond aan de hand van eenvoudige voorbeelden.

For-lus gebruiken

Maak een bash-bestand met het volgende script waarin ` voor ` lus wordt gebruikt voor iteratie. `voor` loop wordt voornamelijk gebruikt voor het herhalen van een lijst met gegevens of een array. Hier wordt een lijst met weekdagnamen gebruikt en elke weekdagnaam wordt herhaald door for-lus te gebruiken. `als` statement wordt gebruikt om een ​​bepaald bericht af te drukken op basis van de naam van de weekdag.

voor.sh

#Lees een weekdagnaam in elke iteratie van de lus
voordaginmaandag dinsdag woensdag donderdag vrijdag zaterdag Zondag
doen

#Controleer of de naam van de weekdag maandag of donderdag is
indien [[ $dag=='Maandag' || $dag=='Donderdag' ]]
dan
gooide uit 'Vergadering aan'$dagom 9.30 uur'

#Controleer of de naam van de weekdag dinsdag of woensdag of vrijdag is
elif [[ $dag=='Dinsdag' || $dag=='Woensdag' || $dag=='Vrijdag' ]]
dan
gooide uit 'Trainen door'$dagom 11:00 uur'
anders

#Print 'Vakantie' voor andere dagen
gooide uit '$dagis vakantie'
zijn
gedaan

Uitgang:

Voer het script uit.

$bashvoor.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

Als je meer wilt weten over bash for loop, dan kun je deze tutorial bekijken.

While-lus gebruiken

Maak een bash-bestand met het volgende script waarin ` terwijl ` lus wordt gebruikt voor iteratie. Dit script drukt die getallen van 1 tot 20 af die even en deelbaar zijn door 5. Hier, $teller variabele wordt gebruikt om de iteratie van de lus te regelen en de waarde van deze variabele wordt in elke iteratie met 1 verhoogd. Wanneer `als` voorwaarde zal true retourneren, dan wordt de waarde van afgedrukt $teller .

#!/bin/bash

#Print het bericht
gooide uit 'Druk de getallen af ​​die even en deelbaar zijn door 5'

#Initialiseer de teller
balie=1

#Herhaal de lus totdat de $counter-waarde kleiner is dan of gelijk is aan 20
terwijl [ $teller -de twintig ]
doen

#Controleer of de $counter deelbaar is door 2 en 5
indien [[ $teller%2-eq 0 && $teller%5-eq 0 ]]
dan
#Print $teller zonder nieuwe regel
gooide uit '$teller'
zijn

#Verhoog $counter met 1
((teller++))
gedaan
gooide uit 'Gedaan'

Uitgang:

$bashwhile.sh

Er zijn alleen getallen binnen 1-20 die even en deelbaar zijn door 5. De volgende uitvoer zal verschijnen nadat het script is uitgevoerd.

Als je meer wilt weten over bash ` terwijl' lus dan kun je controleren deze tutorial .

Tot-lus gebruiken

Maak een bash-bestand met het volgende script waarin ` tot ` lus wordt gebruikt voor iteratie. Dit script drukt alle oneven getallen van 0 tot 20 af. $n variabele wordt in dit script gebruikt om de lus te herhalen.

tot.sh

#!/bin/bash

#Initialiseer de variabele, n
N=twintig

#Herhaal de lus totdat de waarde van $n groter is dan 0
tot [ $n -lt 0 ]
doen

#Controleer of de waarde van n oneven is
indien [[ $n%2-gt 0 ]]
dan
gooide uit $n
zijn

#Verhoog de waarde van n met 1
((N=$n-1))
gedaan

Uitgang:

Voer het script uit.

$bashtot.sh

Het script drukt alle even getallen van 20 tot 1 af. De volgende uitvoer verschijnt nadat het script is uitgevoerd.

Ga naar boven

Functies

Wanneer een codeblok meerdere keren in een script moet worden uitgevoerd, wordt de functie gebruikt om de taak uit te voeren. U hoeft de functie alleen bij de naam aan te roepen wanneer het script dat in de functie is gedefinieerd, vele malen moet worden uitgevoerd in plaats van hetzelfde script meerdere keren toe te voegen. De beginnende en eindigende eerste haak wordt gebruikt met de functienaam om de functie in bash-script te declareren. De functie kan worden aangeroepen door alleen de functienaam in bash. Bash ondersteunt geen functieargumenten zoals een andere standaard programmeertaal. Maar de waarde kan op een andere manier aan de bash-functie worden doorgegeven die in deze sectie wordt getoond. De waarde kan worden geretourneerd door de functie met de return-instructie of zonder de return-instructie te gebruiken.

Maak een bash-bestand met het volgende script om te weten hoe de functies kunnen worden gedeclareerd en aangeroepen in bash-script. In het script worden drie functies gedeclareerd. De eerste functie is gedeclareerd om een ​​eenvoudig bericht af te drukken, Bash-programmering voor beginners . De tweede functie wordt gedeclareerd om een ​​stringwaarde in een variabele toe te wijzen, $return_str dat zal afdrukken, Leer bash-programmeren met LinuxHint na het aanroepen van de functie. De derde functie wordt gedeclareerd om een ​​argumentwaarde als cirkelradius te lezen die zal worden verstrekt op het moment dat de functie wordt aangeroepen. Hier, lokaal wordt gebruikt om de argumentwaarde te lezen. Deze functie berekent het gebied van de cirkel op basis van de straalwaarde met behulp van de formule, r2 en druk de berekende oppervlaktewaarde af.

func.sh

#!/bin/bash

#Declareer een eenvoudige functie
functieprint_message()
{
gooide uit 'Bash-programmering voor beginners'
}

#Declareer een functie om een ​​tekenreekswaarde te retourneren
functieret_strdata()
{
#Initialiseer de variabele met tekenreekswaarde
return_str='Leer bash-programmeren met LinuxHint'
}

#Declareer een functie om de argumentwaarde te lezen
functiebereken_gebied()

#Lees de doorgegeven argumentwaarde
lokaal straal=$ 1
Oppervlakte= $(gooide uit $straal*$straal*3.14

#Bel de functie om een ​​eenvoudig bericht af te drukken
print_message

#Bel de functie die een tekenreekswaarde aan een variabele toewijst
ret_strdata

#Print de waarde van de variabele
gooide uit $return_str

#Lees de straalwaarde
gooide uit 'Vul de straalwaarde in'
lezenwerk

#Bel de functie met straalwaarde
bereken_gebied$ rad

Uitgang:

Voer het script uit.

$bashfunc.sh

De volgende uitvoer verschijnt na het uitvoeren van het script. De eerste twee regels worden afgedrukt door de functies aan te roepen, print_message() en ret_strdata () . De laatste regel wordt afgedrukt door de functie aan te roepen, bereken_gebied () met de genomen invoerstraalwaarde.

Als je meer wilt weten over het retourneren van een string van de bash-functie, dan kun je: deze zelfstudie de.

Ga naar boven

Programma's aanroepen in een script

U kunt veel soorten opdrachten gebruiken om andere programma's in elk bash-script aan te roepen, zoals: bron, bash, eval, uitvoerend , enz. Stel dat drie bash-bestanden, add.sh , aftrekken.sh, vermenigvuldigen.sh en delen.sh gemaakt om optellen, aftrekken, vermenigvuldigen en delen uit te voeren. Hier, aftrekken.sh en divisie.sh lees opdrachtregelargumenten. Het script van al deze vier bestanden wordt hieronder gegeven.

add.sh

#!/bin/bash
tot=60
B=40
((resultaat=$ a+$ b))
gooide uit 'De toevoeging van$ a+$ b=$resultaat'

subract.sh

#!/bin/bash
tot=$ 1
B=$ 2
((resultaat=$ a-$ b))
gooide uit 'Het aftrekken van'$ a-$ b=$resultaat'

vermenigvuldigen.sh

#!/bin/bash
((resultaat=$ 1*$ 2))
gooide uit 'De vermenigvuldiging van $1 en $2 is$resultaat'

verdeel.sh

#!/bin/bash
tot=$ 1
B=2
((resultaat=$ a/$ b))
gooide uit 'De verdeling van'$ adoor$ bis$resultaat'

Maak een bash-bestand met de naam, callpro.sh met het volgende script om de genoemde bash-bestanden aan te roepen met behulp van source-, bash-, eval- en exec-commando's. U moet de uitvoeringsmachtiging instellen voor de vier bovenstaande bestanden voordat u het volgende script uitvoert. `source` commando wordt gebruikt om aan te roepen add.sh het dossier. Het `bash`-commando wordt gebruikt om het subtract.sh-bestand uit te voeren. Het `eval` commando wordt gebruikt om het multiplier.sh bestand uit te voeren. Twee invoerwaarden worden verzonden als opdrachtregelargumenten voor het `eval`-commando. De laatste opdracht is de exec-opdracht die alleen met het absolute pad werkt. Hiervoor wordt de volledige padnaam van het bestand divide.sh in het script gegeven.

callpro.sh

#!/bin/bash
script1='add.sh'
script2='aftrekken.sh'
script3='vermenigvuldigen.sh'
script4='/home/fahmida/code/divide.sh'

bron '$script1'

bash $script2 vijftig twintig

gooide uit 'Vul de waarde van a in'
lezentot
gooide uit 'Vul de waarde van b in'
lezenB
evalueren bash $script3 $ a $ b
uitvoerend $script4 30

Uitgang:

Voer het script uit.

$bashcallpro.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

Ga naar boven

Menu's maken

Er is een handig commando in bash om een ​​eenvoudig menu te maken met de naam `selecteren` opdracht. Met deze opdracht kunnen verschillende soorten menu's worden gemaakt. Met deze opdracht wordt een bepaalde gegevenslijst gebruikt om een ​​menu te maken. Maak een bash-bestand met de volgende code om het gebruik van te zien `selecteren` commando voor het maken van een menu. In dit voorbeeld wordt de lijst met vijf items afgedrukt als een menu en wordt de gebruiker gevraagd een taal uit de lijst te kiezen. De geselecteerde waarde wordt opgeslagen in de variabele, $taal die later wordt afgedrukt door samen te voegen met een andere tekenreeks. Het script zal continu vragen om de taal te selecteren totdat de gebruiker op . drukt 6 uit het script te beëindigen.

menu.sh

#!/bin/bash

#Print bericht voor de gebruiker
gooide uit 'Selecteer je favoriete taal'

# Definieer de lijst van een menu-item
selecteertaalinC# Java PHP Python Bash Afsluiten
doen
#Print de geselecteerde waarde
indien [[ $taal=='Uitgang' ]]
dan
Uitgang 0
anders
gooide uit 'Geselecteerde taal is$taal'
zijn
gedaan

Uitgang:

Voer het script uit.

$bashmenu.sh

Volgens de volgende uitvoer drukte de gebruiker voor de eerste keer op 3 om PHP af te drukken en voor de tweede keer op 6 die eindigde met het script.

Als je meer wilt weten over het maken van bash-menu's met `select`, kun je deze tutorial bezoeken.

Ga naar boven

Opdrachtregelverwerking

Soms moeten we invoerwaarden opgeven bij het uitvoeren van het script vanaf de opdrachtregel. Deze taak kan in bash op twee manieren worden gedaan. Een manier is door argumentvariabelen te gebruiken en een andere manier is door de functie getopts te gebruiken. Het lezen van invoergegevens van de opdrachtregel van de terminal met behulp van de argumentvariabele wordt in deze sectie getoond.

Maak een bash-bestand met het volgende script om het gebruik van het lezen van de opdrachtregelargumentwaarde te zien. Dit script leest drie opdrachtregelargumenten die worden opgeslagen in de variabelen $operand1, $operand2 en $operator. Om het script correct uit te voeren, moeten de eerste en derde argumentwaarden het getal zijn en de tweede argumentwaarde een van de vier rekenkundige operatoren ('+', '-', '/', 'x'). indien statement controleert de waarde van $operator en voert de bewerking uit op basis van de operator en drukt de waarde af.

cl1.sh

#!/bin/bash

#Druk de argumentvariabelen af
gooide uit 'Argumentwaarden zijn: $1 $2 $3'

# Bewaar argumentwaarden
operand1=$ 1
operand2=$ 3
operator=$ 2

#Controleer de waarde van het 2e commando-argument om de rekenkundige bewerking uit te voeren
indien [[ $operator=='+' ]]
dan
((resultaat=$ operand1+$ operand2))
elif [[ $operator=='-' ]]
dan
((resultaat=$ operand1-$ operand2))
elif [[ $operator=='x' ]]
dan
((resultaat=$ operand1*$ operand2))
elif [[ $operator=='/' ]]
dan

((resultaat=$ operand1/$ operand2))
zijn

# print het resultaat
gooide uit -En 'Resultaat is =$resultaat'

Uitgang:

Voer het script uit.

$bashcl1.sh

Het script wordt vier keer uitgevoerd voor vier typen rekenkundige operatoren. De volgende uitvoer verschijnt voor de argumentwaarden, 6 + 3, 6 – 3, 6 x 3 en 6 / 3 .

Argumentwaarden kunnen worden doorgegeven met een naam-waardepaar in bash. Maak een bash-bestand met het volgende script om te laten zien hoe argumentwaarden met de naam worden gelezen. Het script leest twee argumentvariabelen. De argumentwaarden met naam worden afgedrukt in de eerste instructie van het script. Vervolgens wordt een for-lus gebruikt om de array te herhalen die opdrachtregelargumentwaarden bevat. Elk element van de array wordt gescheiden in een sleutel-waardepaar met behulp van de opdracht `cut`. Vervolgens wordt case-statement gebruikt om een ​​bepaald bericht af te drukken op basis van de sleutelwaarde.

cl2.sh

#! /ben/bash

#Druk de argumentvariabelen af
gooide uit 'Argumentwaarden zijn: $1 $2'

#Lees elk argument afzonderlijk met de for-lus
voorboosin ' [e-mail beveiligd]'
doen

#Scheid argumentnaam en waarde
toets= $(gooide uit $ arg | snee -f1 -NS=)
waarde= $(gooide uit $ arg | snee -f2 -NS=)

#Print bericht op basis van de naam van het argument
geval $sleutel in
naam) gooide uit 'Naam leerling =$waarde';;
markering) gooide uit 'Behaalde cijfer =$waarde' ;;
*)
esac
gedaan

Uitgang:

Voer het script uit met de volgende opdrachtregelargumenten.

$bashcl2.shnaam=Abir Hossainmarkering=90

In de bovenstaande opdrachten worden twee opdrachtregelargumenten gegeven. Dit zijn name=Abir Hossain en mark=90 . naam en merken worden gescheiden door het script en twee waarden worden afgedrukt na het formatteren van de uitvoer.

Opdrachtregelargumenten verwerken met behulp van getopt functie wordt in deze tutorial niet besproken. Als u meer wilt weten over de verwerking van de opdrachtregel met behulp van getopt functie dan kunt u bezoeken deze tutorial .

Ga naar boven

Rekenkundig

Het uitvoeren van rekenkundige bewerkingen is een veelvoorkomende vereiste van elke programmeertaal. Bash doet de rekenkundige bewerking op een andere manier dan een andere standaard programmeertaal. Er zijn meerdere manieren om rekenkundige bewerkingen uit te voeren in bash. Een van de eenvoudige manieren om de rekenkundige bewerking uit te voeren, wordt in deze sectie getoond. Maak een bash-bestand met het volgende script. In dit script worden vier soorten rekenkundige bewerkingen weergegeven. Een eenvoudige optel- en deelbewerkingen worden getoond door dubbele eerste haakjes aan het begin van het script te gebruiken. Vervolgens wordt de pre-incrementbewerking getoond. Ten slotte wordt de manier om de steno-operator te gebruiken getoond in het laatste deel van het script.

arit.sh

#!/bin/bash
# Bereken de som
resultaat= $((vijftig+25))
# Sommatiewaarde afdrukken
gooide uit 'som =$resultaat'

# Bereken de deling
resultaat= $((vijftig/25))
# Print delingswaarde
gooide uit 'divisie =$resultaat'

# Ken een waarde toe aan N
N=10
# Pre-increment doen
((--N))
# Druk de waarde van N . af
gooide uit 'Waarde na afname =$Nee'

# Verkorte operator gebruiken
((N +=10 ))
# Druk de waarde van N . af
gooide uit 'Waarde na toevoeging van 10 =$Nee'

Uitgang:

Voer het script uit.

$basharit.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

Alle rekenkundige bewerkingen worden uitgevoerd met dubbele haakjes in dit bovenstaande script. Maar je kunt ' laten ’,‘ expr ' en ' bc ' opdracht om de rekenkundige bewerking in bash uit te voeren. Als je meer wilt weten over deze commando's voor het uitvoeren van bash rekenkundige bewerkingen, dan kun je deze tutorial bezoeken.

Ga naar boven

Snaarmanipulatie

Er kunnen veel soorten taken worden uitgevoerd met de tekenreeksgegevens in bash. Sommige zijn het aaneenschakelen van strings, het vergelijken van strings, het splitsen van een string, het veranderen van de hoofdletters van de string, enz. Er zijn geen ingebouwde stringfuncties zoals andere standaardtalen in bash om de stringbewerkingen uit te voeren. In dit gedeelte van deze zelfstudie worden enkele veelvoorkomende tekenreeksmanipulaties besproken.

Aaneenschakelende tekenreeks

Het samenvoegen van twee of meer strings wordt stringconcatenatie genoemd. De snaar wordt in bash samengevoegd door de een na de ander te plaatsen. Maak een bash-bestand met het volgende script om het gebruik van tekenreeksaaneenschakeling te tonen. Twee stringvariabelen worden geïnitialiseerd en afgedrukt na het combineren van de variabelen. Hier de inhoud van $string1 en $string2 worden samengevoegd en afgedrukt.

concat.sh

#!/bin/bash

#Initialiseer eerste tekenreeksvariabele
tekenreeks1='Ik hou van '
#Initialiseer tweede tekenreeksvariabele
string2='Bash-programmering'
#Print na het combineren van beide strings
gooide uit '$string1$string2'

Uitgang:

Voer het script uit.

$bashconcat.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

U kunt meer te weten komen over het samenvoegen van tekenreeksen in deze zelfstudie.

Ga naar boven

String vergelijken

Bash gebruikt verschillende soorten operators om stringgegevens te vergelijken. Maak een bash-bestand met het volgende script om te laten zien hoe u twee tekenreeksgegevens kunt vergelijken. Een tekenreekswaarde wordt als invoer in het script genomen en wordt vergeleken met een andere tekenreeks. Als de waarde overeenkomt, verschijnt er een bericht, Je houdt van Python wordt anders afgedrukt Je houdt van PERL zal worden afgedrukt.

vergelijk.sh

#!/bin/bash
gooide uitVoer een willekeurige tekenreekswaarde in
lezentekst

#Controleer of de invoergegevens gelijk zijn aan Python
indien [ $tekst=='Python' ];dan
gooide uit 'Je houdt van Python.'
anders
gooide uit 'Je houdt van PERL'
zijn

Uitgang:

Voer het script uit.

$bashvergelijk.sh

De volgende uitvoer verschijnt na het uitvoeren van het script waarbij de invoerwaarde 'PERL' is.

U kunt meer weten over het vergelijken van strings van deze tutorial .

String splitsen

Bash heeft geen ingebouwde splitsfunctie om stringgegevens te verdelen. De stringgegevens kunnen in bash op meerdere manieren worden verdeeld op basis van verschillende soorten scheidingstekens. Maak een bash-bestand met het volgende script om te laten zien hoe stringgegevens in bash kunnen worden verdeeld. Een stringwaarde wordt als invoer genomen. Dit script verdeelt de waarde van $tekst gebaseerd op ruimte. Hier de IFS variabele wordt gebruikt om het scheidingsteken in te stellen. `lezen` commando wordt hier gebruikt om de tekstwaarde te verdelen en de waarden op te slaan in een array. voor loop wordt gebruikt om de array te herhalen en de waarde van elk element af te drukken.

split.sh

#!/bin/bash
#Voer een tekenreekswaarde in
gooide uitVoer een tekenreekswaarde in
lezentekst
# Stel het scheidingsteken in
IFS=''
#Split de waarde van $text in een array op basis van een spatiescheidingsteken
lezen -totarr<<< '$tekst'
# Print elke waarde van de array
voorwaardein '${arr[@]}';
doen
printf '$waardeN'
gedaan

Uitgang:

Voer het script uit.

$bashsplit.sh

De volgende output zal verschijnen na het nemen van de input, Leer Bash-programmering . Deze invoerwaarde is een tekst van drie woorden. De string is dus verdeeld in drie delen.

U kunt meer weten over het vergelijken van strings van deze tutorial .

Hoofdlettergebruik van de tekenreeks wijzigen

De meeste scripttalen hebben ingebouwde functies om het hoofdlettergebruik van de tekenreeksgegevens te wijzigen. Maar het geval van de stringgegevens kan in bash worden gewijzigd door te gebruiken `tr` commando of met behulp van ':bovenste' en ':lager' trefwoorden. Maak een bash-bestand met het volgende script om de manieren te kennen om hoofdletters in bash te veranderen. Hier worden de eerste tekenreeksgegevens geconverteerd naar hoofdletters met behulp van '^^' symbool en de tweede tekenreeks wordt geconverteerd naar kleine letters met behulp van `tr` opdracht. `tr` commando doorzoekt alle hoofdletters in de tekenreeks en zet de tekens om in kleine letters.

case.sh

#!/bin/bash

#Initialiseer de eerste stringgegevens
Tekst 1=' [e-mail beveiligd]'

#Druk de waarde van $text1 af door alle tekens naar hoofdletters te converteren
gooide uit ${e-mail^^}

#Initialiseer de tweede tekenreeksgegevens
tekst2='Bash Programmeren Basics'

#Druk de waarde van $text2 af door alle hoofdletters naar kleine letters te converteren
gooide uit $tekst2 | NS [:bovenste:] [:lager:]

Uitgang:

Voer het script uit.

$bashcase.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

U kunt meer weten over het vergelijken van strings van deze tutorial .

Ga naar boven

Tekenreeksgegevens lezen via de lus

De stringgegevens werken als een tekenreeks voor elke programmeertaal. Hoe ' voor ’ loop kan worden gebruikt om stringgegevens in bash te lezen, wordt in deze sectie getoond. Maak een basisbestand met het volgende script om elk deel van de tekenreekswaarde te lezen door for-lus te gebruiken.

leesstr.sh

#!/bin/bas
# Lees elk woord van een tekst door de for-lus te gebruiken
voorwaardeinBash-programmeringvoorde beginners
doen
gooide uit $waarde
gedaan

Uitgang:

Voer het script uit.

$bashleesstr.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

U kunt meer weten over het herhalen van stringgegevens door de lus te gebruiken van deze tutorial .

Ga naar boven

Return-codes van een script retourneren en in een ander script vangen

Een bash-script kan retourcodes van een ander script opvangen door het script aan te roepen en te gebruiken '$?' om de retourwaarde te lezen. Stel dat een bash-bestand met de naam eerste.sh retourneert een code na uitvoering. Maak nog een bash-bestand met de naam tweede.sh en voeg het volgende script toe om de retourwaarde te vangen en enkele andere taken uit te voeren. De code van beide bestanden wordt hieronder gegeven. eerste.sh bestand wordt aangeroepen van tweede.sh bestand aan het begin van het script. eerste.sh zal een exit-code retourneren op basis van de invoerwaarde. second.sh zal de code vangen door '$?' en vergelijk met 1. Als beide waarden gelijk zijn, wordt afgedrukt, Het invoernummer is groter dan 100 , anders wordt het afgedrukt, Het invoergetal is kleiner dan of gelijk aan 100 .

eerste.sh

#!/bin/bash

gooide uit 'Voer een numerieke waarde in'
lezenN

# Controleer of de invoerwaarde kleiner is dan of gelijk is aan 100 of niet
indien [[ $n -de 100 ]]
dan
Uitgang 0
anders
Uitgang 1
zijn

tweede.sh

#! /bin/bash

#Voer het bestand uit, eerst.sh
bash 'eerste.sh'

#Controleer of de retourcode gelijk is aan 1 of niet
indien [ $? -eq 1 ]
dan
gooide uit 'Het invoernummer is groter dan 100'
anders
gooide uit 'Het invoergetal is kleiner dan of gelijk aan 100'
zijn

Uitgang:

Voer het script uit.

$bashtweede.sh

De volgende uitvoer verschijnt wanneer het script twee keer wordt uitgevoerd door 55 en 110.

Ga naar boven

Lezen en schrijven naar bestanden

Het lezen en schrijven van bestanden zijn algemene vereisten voor bash-programmering. Bash heeft geen ingebouwde functie zoals een andere taal om het bestand te lezen of te schrijven. Er zijn meerdere manieren om het bestand in bash te lezen. De meest gebruikelijke manier om een ​​bestand in bash te lezen of te schrijven is het gebruik van `kat` opdracht. Maar deze opdracht wordt gebruikt om de hele inhoud van het bestand tegelijk te lezen. U kunt elk bestand ook regel voor regel lezen door een willekeurige lus te gebruiken en `lezen` opdracht. Omleidingsoperator gebruiken, ‘>’ , kunt u gegevens naar elk bestand in bash schrijven. Als u gegevens aan een bestand wilt toevoegen, moet u gebruiken '>>' exploitant. Zowel het lezen als het schrijven van bestanden worden in het volgende deel van deze sectie getoond.

Bestand lezen in bash

Maak een bash-bestand met het volgende script om een ​​bestaand bestand met de naam ' hardware.txt ’. Hieronder vindt u de inhoud van dit bestand. In het script wordt de hele inhoud van het bestand gelezen door `kat` commando first en next, terwijl loop wordt gebruikt om het bestand regel voor regel te lezen.

hardware.txt

Toezicht houden op
Toetsenbord
Muis
Scanner
Printer

readfile.sh

#!/bin/bash

gooide uit 'Bestand lezen met cat-commando'

# Lees de inhoud van het bestand met het `cat` commando
inhoud=``kathardware.txt``
gooide uit $inhoud

gooide uit 'Bestand regel voor regel lezen met lus'

# Wijs de bestandsnaam toe
bestandsnaam='hardware.txt'

# Elke regel van het bestand wordt gelezen door elke iteratie van de lus
terwijl lezenlijn;
doen
# print de regel
gooide uit $lijn
gedaan<$bestandsnaam

Uitgang:

Voer de volgende opdrachten uit.

$kathardware.txt
$bashreadfile.sh

Hier zal de eerste opdracht de inhoud van het bestand afdrukken, hardware.txt zonder een bash-script uit te voeren en de tweede opdracht voert het script van . uit readfile.sh en druk de inhoud van het bestand twee keer af met `kat` commando en `lezen` commando met while-lus. U kunt dit bezoeken zelfstudie om meer te weten over het regel voor regel lezen van bestanden.

Bestand schrijven in bash

Maak een bash-bestand met het volgende script om nieuwe inhoud in een nieuw bestand te schrijven en gegevens in dat bestand toe te voegen.

writefile.sh

#!/bin/bash

gooide uit 'Voer wat tekst in'
#Lees tekenreeksgegevens
lezenstr1
#Voeg invoergegevens voor de eerste keer toe aan het bestand
gooide uit $str1 >test.txt

gooide uit 'Voer een andere tekst in'
#Lees een andere string data
lezenstr2
#Voeg invoergegevens toe aan het einde van het bestand
gooide uit $str2 >>test.txt

#Toon de volledige inhoud van het bestand
gooide uit ``kattest.txt``

Uitgang:

Voer het script uit.

$bashwritefile.sh

De volgende uitvoer verschijnt na het uitvoeren van het script.

Ga naar boven

pijpen

Pipe wordt gebruikt om commando-uitvoer om te leiden naar andere commando-invoer. Het kan tussen verschillende soorten bash-commando's worden gebruikt om specifieke uitvoer te genereren. De standaard ingang is via pijp verbonden met de standaard uitgang in Linux. U moet de opdracht in volgorde instellen met het pipe-symbool ( | ) om de gewenste uitvoer te krijgen. Twee of meer opdrachten kunnen samen in één opdracht worden uitgevoerd met behulp van pipe. Je moet meerdere commando's in meerdere regels zonder pijp uitvoeren om dezelfde taak uit te voeren. Het gebruik van pijp is dus zeer nuttig voor het uitvoeren van vele soorten taken in een korte vorm.

syntaxis:

commando1|commando2|...

Hier wordt de output van command1 doorgegeven als input van command2.

Hetzelfde type taak wordt uitgevoerd met pijp en zonder pijp in het volgende deel van deze sectie. Stel dat een tekstbestand met de naam merken.txt wordt gegeven met de volgende gegevens.

merken.txt

Asraf CSE-409 79

Kabir CSE-304 95

Keya CSE-101 67

Asraf CSE-304 88

Keya CSE-409 90

Asraf CSE-101 92

Je moet de gegevens van het bestand sorteren en alle invoer van de studentnaam 'K . opzoeken en afdrukken Ja ' . U kunt deze taak uitvoeren door meerdere opdrachten uit te voeren zonder een pijp te gebruiken die in de volgende sectie wordt getoond. De volgende opdrachten moeten worden uitgevoerd om de gewenste uitvoer te krijgen. De eerste opdracht zal het bestand sorteren. Het tweede commando zoekt het item 'K Ja ' met behulp van ` greep ` commando en sla de uitvoer op in een temp.txt het dossier. Het derde commando telt het totale aantal regels van a temp.txt bestand met behulp van `wc` opdracht.

$soortmerken.txt
$greep 'Key'merken.txt>temp.txt
$wc -detemp.txt

Uitgang:

Er zijn twee vermeldingen van de student, 'Keya', in het bestand. Dus na het uitvoeren van de bovenstaande opdrachten, verschijnt de volgende uitvoer.

U kunt de bovenstaande drie opdrachten eenvoudig samenvoegen en dezelfde uitvoer krijgen door een enkele opdracht uit te voeren met een pijp die wordt weergegeven in de volgende opdracht. Er is hier geen tijdelijk bestand vereist om de uitvoer te krijgen. Hier is de uitvoer van de ` soort ` commando wordt doorgegeven als invoer van ` greep ` commando en de uitvoer van de ` greep ` commando wordt doorgegeven als invoer voor de `wc` opdracht.

$soortmerken.txt| greep 'Key' | wc -de

Uitgang:

Nadat u de bovenstaande opdracht hebt uitgevoerd, krijgt u de volgende uitvoer zoals de uitvoer van de vorige opdracht. De uitvoer van het commando is 2.

Ga naar boven

Conclusie:

De meest bruikbare en noodzakelijke onderwerpen van bash-scripttaal worden in deze zelfstudie behandeld. Ik hoop dat de lezer er baat bij heeft na het lezen van deze tutorial en in staat zal zijn om bash-script efficiënter te schrijven.