Hvordan lage enkle Shell-skript i Linux


Å lage shell-skript er en av de mest essensielle ferdighetene som Linux-brukere bør ha på fingertuppen. Shell-skript spiller en enorm rolle i å automatisere repeterende oppgaver som ellers ville vært kjedelig å utføre linje for linje.

I denne opplæringen fremhever vi noen av de grunnleggende shell-skriptoperasjonene som enhver Linux-bruker bør ha.

1. Lag et enkelt skallskript

Et skallskript er en fil som inneholder ASCII-tekst. Vi starter med å lage et enkelt skallskript, og for å gjøre dette bruker vi et tekstredigeringsprogram. Det er ganske mange tekstredigerere, både kommandolinje- og GUI-baserte. For denne veiledningen vil vi bruke vim-editoren.

Vi starter med å lage et enkelt skript som viser «Hello world» når det kjøres.

vim hello.sh

Lim inn følgende innhold i filen og lagre.

#!/bin/bash
Print Hello world message
echo "Hello World!"

La oss gå gjennom skallskriptet linje for linje.

  • Den første linjen – #!/bin/bash – er kjent som shebang-overskriften. Dette er en spesiell konstruksjon som indikerer hvilket program som skal brukes til å tolke skriptet. I dette tilfellet vil dette være bash-skallet angitt med /bin/bash. Det finnes andre skriptspråk som Python som er merket med #!/usr/bin/python3 og Perl hvis shebang-overskrift er merket med #!/usr/bin/perl.
  • Den andre linjen er en kommentar. En kommentar er en setning som beskriver hva et skallskript gjør og ikke kjøres når skriptet kjøres. Kommentarer innledes alltid med hash-tegnet #.
  • Den siste linjen er kommandoen som skriver ut «Hello World»-meldingen på terminalen.

Det neste trinnet er å gjøre skriptet kjørbart ved å tildele kjøringstillatelse ved å bruke chmod-kommandoen som vist.

chmod +x  hello.sh

Til slutt, kjør skallskriptet ved å bruke en av kommandoene:

bash hello.sh
OR
./hello.sh

2. Bruke betingede erklæringer for å utføre kode

Som andre programmeringsspråk, brukes betingede utsagn i bash-skripting for å ta avgjørelser, med bare en liten variasjon i syntaksen. Vi skal dekke if, if-else og elif betingede utsagn.

Eksempel på en if Statement Only

if-setningen kan brukes til å teste enkelt eller flere forhold. Vi starter med den grunnleggende bruken av if-setningen for å teste en enkelt tilstand. if-setningen er definert av if ... fi-blokkene.

if command
then
  statement
fi

La oss ta en titt på skallskriptet nedenfor.

#!/bin/bash
echo 'Enter the score'
read x

if [[ $x == 70 ]]; then
  echo 'Good job!'
fi

Shell-skriptet ovenfor ber brukeren om å gi en poengsum som deretter lagres i en variabel x. Hvis poengsummen tilsvarer 70, returnerer skriptet utdata "Godt jobbet! ". Sammenligningsoperatoren == brukes til å teste om den angitte poengsummen, som er lagret i variabelen x, tilsvarer 100.

Andre sammenligningsoperatorer du kan bruke inkluderer:

  • -eq – lik
  • -ne – Ikke lik
  • -lt – Mindre enn
  • -le – Mindre enn eller lik
  • -lt – Mindre enn
  • -ge – Større enn eller lik

For eksempel, hvis-utsagnet-blokken nedenfor skriver ut «Arbeid hardere» hvis inndatapoengsummen er en verdi mindre enn 50.

if [[ $x -lt 50 ]]; then
  echo 'Work Harder!'
fi

Eksempel på en if-else-erklæring

For situasjoner der du har 2 mulige utfall: – enten dette eller det – kommer if-else-utsagnet godt med.

if command
then
  statement1
else
  statement2
fi

Skriptet nedenfor leser inndatapoengene og sjekker om den er større enn eller lik 70.

Hvis poengsummen er større enn eller lik 70, får du meldingen «Flott jobbet, du har bestått!». Men hvis poengsummen faller under 70, vil utdata «Du mislyktes» bli skrevet ut.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -ge 70 ]]; then
  echo 'Great job, You passed!'
else
  echo  'You failed'
fi

Eksempel på en if-elif-else-erklæring

I scenarier der det er flere forhold og ulike utfall, brukes if-elif-else-setningen. Denne uttalelsen har følgende format.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

For eksempel har vi et skript for et lotteri som sjekker om tallet som er angitt enten er 90, 60 eller 30.

#!/bin/bash

echo 'Enter the score'

read x

if [[ $x -eq 90 ]];
then
  echo “You have won the First Prize”

elif [[ $x -eq 60 ]];
then
  echo “You have won the Second Prize”

elif [[ $x -eq 30 ]];
then 
  echo “You have won the Second Prize”
else
  echo “Please try again”
fi

3. Bruke If-setningen med AND Logic

Du kan bruke if-setningen ved siden av AND-logikkoperatoren for å utføre en oppgave hvis to betingelser er oppfylt. Operatoren && brukes til å angi AND-logikken.

#!/bin/bash

echo 'Please Enter your user_id'
read user_id

echo 'Please Enter your tag_no'
read tag_id

if [[ ($user_id == “tecmint” && $tag_id -eq 3990) ]];
then
  echo “Login successful”
else
  echo “Login failure”
fi

5. Bruke If-setningen med OR-logikk

Når du bruker ELLER-logikken, som er representert med ||-symbolet, må en av betingelsene være tilfredsstilt med skriptet for å gi de forventede resultatene.

#!/bin/bash

echo 'Please enter a random number'
read number

if [[ (number -eq 55 || number -eq 80) ]];
then
 echo 'Congratulations! You’ve won'
else
 echo 'Sorry, try again'
fi

Bruk løkkekonstruksjoner

Bash løkker lar brukere utføre en rekke oppgaver til et bestemt resultat er oppnådd. Dette kommer godt med når du utfører repeterende oppgaver. I denne delen skal vi ta en titt på noen av løkkene som du også finner på andre programmeringsspråk.

Mens loop

Dette er en av de enkleste løkkene å jobbe med. Syntaksen er ganske enkel:

while  <some test>
do
 commands
done

While-løkken nedenfor viser alle tallene fra 1 til 10 når den utføres.

#!/bin/bash
A simple while loop
counter=1
while [ $counter -le 10 ]
 do
echo $counter
 ((counter++))
done

La oss diskutere while-løkken:

Variabelen teller er initialisert til 1. Og mens variabelen er mindre enn eller lik 10, vil verdien av telleren økes til betingelsen er oppfylt. Linjen ekko $counter skriver ut alle tallene fra 1 til 10.

For loop

I likhet med while løkken, brukes en for loop for å kjøre kode iterativt. Dvs. gjenta kjøring av kode så mange ganger som mulig definert av brukeren.

Syntaksen er:

for var in 1 2 3 4 5 N
do
 command1
 command2
done

for-løkken nedenfor går gjennom 1 rett til 10 og behandler verdiene deres på skjermen.

En bedre måte å oppnå dette på er å definere et område ved å bruke de doble krøllete klammeparentesene { } som vist i stedet for å skrive inn alle tallene.

#!/bin/bash
Specify range in a for loop

for num in {1..10}
do
  echo $num
done

Bash posisjonsparametere

En posisjonsparameter er en spesiell variabel som refereres til i skriptet når verdier sendes på skallet, men som ikke kan tildeles. Posisjonelle parametere går fra $0 $1 $2 $3 …… til $9. Utover $9-verdien, må parametrene omsluttes av krøllede parenteser, f.eks. $ {10}, $ {11} … og så videre.

Når du kjører skriptet, tar den første posisjonsparameteren som er $0 navnet på skallskriptet. Parameteren $1 tar den første variabelen som sendes på terminalen, $2 tar den andre, $3 den tredje og så videre.

La oss lage et skript test.sh som vist.

#!/bin/bash
echo "The name of the script is: " $0
echo "My first name is: " $1
echo "My second name is: " $2

Deretter kjører du skriptet og oppgir for- og andrenavnet som argumenter:

bash test.sh James Kiarie

Fra utdataene kan vi se at den første variabelen som skrives ut er navnet på skallskriptet, i dette tilfellet test.sh. Deretter skrives navnene ut tilsvarende posisjonsparametrene som er definert i shell-skriptet.

Posisjonelle parametere er nyttige ved at de hjelper deg med å tilpasse dataene som legges inn i stedet for å eksplisitt tilordne en verdi til en variabel.

Avgangskoder for Shell Command

La oss begynne med å svare på et enkelt spørsmål: Hva er en utgangskode?

Hver kommando som utføres på skallet av en bruker eller shell-skript har en utgangsstatus. En utgangsstatus er et heltall.

En avslutningsstatus på 0 betyr at kommandoen ble utført uten feil. Alt mellom 1 til 255 viser at kommandoen mislyktes eller ikke ble utført.

For å finne utgangsstatusen til en kommando, bruk $? Shell-variabelen.

En utgangsstatus på 1 peker på en generell feil eller eventuelle utillatte feil, for eksempel redigering av filer uten sudo-tillatelser.

En utgangsstatus på 2 peker på feil bruk av en kommando eller innebygd skallvariabel.

127-avslutningsstatusen peker på en ulovlig kommando som vanligvis gir feilen «kommando ikke funnet».

Behandler utdata av skallkommandoer i et skript

I bash-skripting kan du lagre utdataene fra en kommando i en variabel for fremtidig bruk. Dette blir også referert til som shell-kommandosubstitusjon og kan oppnås på følgende måter.

variable=$(command)
OR
variable=$(/path/to/command)
OR
variable=$(command argument 1 argument 2 ...)

Du kan for eksempel lagre dato-kommandoen i en variabel kalt i dag og kalle opp shell-skriptet for å avsløre gjeldende dato.

#!/bin/bash

today=$(date)

echo “Today is $today”

La oss ta et annet eksempel. Anta at du vil finne de gyldige påloggingsbrukerne på Linux-systemet ditt. Hvordan ville du gått frem? Først lagres listen over alle brukerne (både system-, prosess- og påloggingsbrukere) i /etc/passwd-filen.

For å se filen, må du bruke cat-kommandoen. For å avgrense for å logge på brukere, bruk grep-kommandoen til å søke etter brukere med /bin/bash-attributtet og bruk cut -c 1-10-kommandoen som vist for å vise de første 10 tegnene i navnene.

Vi har lagret cat-kommandoen i login_users-variabelen.

#!/bin/bash
login_users=$(cat /etc/passwd | grep /bin/bash | cut -c 1-10)
echo 'This is the list of login users:
echo $login_users

Dette bringer veiledningen vår om å lage enkle skallskript til slutt. Vi håper du fant dette verdifullt.