Sådan oprettes enkle shell-scripts i Linux


Oprettelse af shell-scripts er en af de mest vigtige færdigheder, som Linux-brugere skal have på fingerspidserne. Shell-scripts spiller en enorm rolle i automatiseringen af gentagne opgaver, som ellers ville være kedelig at udføre linje for linje.

I denne vejledning fremhæver vi nogle af de grundlæggende shell-scripting-operationer, som hver Linux-bruger skal have.

1. Opret et simpelt shell-script

Et shell-script er en fil, der indeholder ASCII-tekst. Vi starter med at oprette et simpelt shell-script, og for at gøre dette bruger vi en teksteditor. Der er et stort antal teksteditorer, både kommandolinje og GUI-baseret. Til denne vejledning bruger vi vim-editoren.

Vi starter med at oprette et simpelt script, der viser "Hello world", når det udføres.

$ vim hello.sh

Indsæt følgende indhold i filen, og gem.

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

Lad os gå over shell-scriptet linje for linje.

  • The first line – #!/bin/bash – is known as the shebang header. This is a special construct that indicates what program will be used to interpret the script. In this case, this will be the bash shell indicated by /bin/bash. There are other scripting languages such as Python which is denoted by #!/usr/bin/python3 and Perl whose shebang header is is denoted by #!/usr/bin/perl.
  • The second line is a comment. A comment is a statement that describes what a shell script does and is not executed when the script is run. Comments are always preceded by the hash sign #.
  • The last line is the command that prints the ‘Hello World’ message on the terminal.

Det næste trin er at gøre scriptet eksekverbart ved at tildele eksekveringstilladelse ved hjælp af chmod-kommandoen som vist.

$ chmod +x  hello.sh

Endelig kør shell-scriptet ved hjælp af en af kommandoerne:

$ bash hello.sh
OR
$ ./hello.sh

2. Brug af betingede udsagn til at udføre kode

Ligesom andre programmeringssprog bruges betingede udsagn i bash-scripting til at træffe beslutninger med kun en lille variation i syntaksen. Vi skal dække betingede udsagn, hvis, hvis-ellers og elif.

If-sætningen kan bruges til at teste enkelte eller flere betingelser. Vi starter med den grundlæggende brug af if-sætningen til at teste en enkelt tilstand. If-sætningen er defineret af if ... fi -blokkene.

if command
then
  statement
fi

Lad os se på shell-scriptet nedenfor.

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

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

Ovenstående shell-script beder brugeren om at give en score, der derefter gemmes i en variabel x. Hvis scoren svarer til 70, returnerer scriptet output "Godt job!". Sammenligningsoperatoren == bruges til at teste, om den indtastede score, der er gemt i variablen x, svarer til 100.

Andre sammenligningsoperatører, du kan bruge, inkluderer:

  • -eq – Equal to
  • -ne – Not equal to
  • -lt – Less than
  • -le – Less than or equal to
  • -lt – Less than
  • -ge – Greater than or equal to

F.eks. Udskriver if-statement-blokken nedenfor 'Work Harder', hvis inputscoren er en værdi, der er mindre end 50.

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

I situationer, hvor du har 2 mulige resultater: - om dette eller det - if-else-udsagnet er nyttigt.

if command
then
  statement1
else
  statement2
fi

Skriptet nedenfor læser inputscoren og kontrollerer, om den er større end eller lig med 70.

Hvis scoren er større end eller lig med 70, får du en meddelelse om "Godt arbejde, du har bestået!". Men hvis scoren falder under 70, udskrives output 'Du mislykkedes'.

#!/bin/bash

echo 'Enter the score'

read x

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

I scenarier, hvor der er flere betingelser og forskellige resultater, bruges if-elif-else-sætningen. Denne erklæring har følgende format.

if condition1
then
  statement1
elif condition2
then
  statement2
else
  statement3
fi

For eksempel har vi et script til et lotteri, der kontrollerer, om det indtastede nummer 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. Brug af If-erklæringen med OG-logik

Du kan bruge if-sætningen sammen med AND-logikoperatøren til at udføre en opgave, hvis to betingelser er opfyldt. Operatøren && bruges til at betegne 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. Brug af If-erklæringen med ELLER logik

Når du bruger ELLER-logikken, der er repræsenteret af || -symbolet, skal en af betingelserne være opfyldt med scriptet for at give de forventede resultater.

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

Brug Looping-konstruktioner

Bash-sløjfer giver brugerne mulighed for at udføre en række opgaver, indtil et bestemt resultat er opnået. Dette er nyttigt ved udførelse af gentagne opgaver. I dette afsnit kigger vi på nogle af sløjferne, som du også ville finde på andre programmeringssprog.

Dette er en af de nemmeste sløjfer at arbejde med. Syntaksen er ret enkel:

while  <some test>
do
 commands
done

Mens loop nedenfor viser alle numrene fra 1 til 10, når de udføres.

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

Lad os diskutere mens løkken:

Variabeltælleren initialiseres til 1. Og mens variablen er mindre end eller lig med 10, vil tællerens værdi blive forøget, indtil betingelsen er opfyldt. Linjeekoet udskriver alle numrene fra 1 til 10.

Ligesom while-loop bruges en for-loop til at udføre kode iterativt. Dvs. gentag kodeudførelse så mange gange som muligt defineret af brugeren.

Syntaksen er:

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

For-sløjfen under itererer gennem 1 lige gennem 10 og behandler deres værdier på skærmen.

En bedre måde at opnå dette på er at definere et interval ved hjælp af de dobbelte krøllede seler {} som vist i stedet for at skrive alle tallene.

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

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

Bash Positionsparametre

En positionsparameter er en speciel variabel, der refereres til i scriptet, når værdier sendes til skallen, men som ikke kan tildeles. Positionsparametre kører fra sh …… til. Ud over værdien skal parametrene være lukket i krøllede parenteser, fx & # 36 {10}, & # 36 {11} ... og så videre.

Når scriptet udføres, tager den første positionsparameter, som er sh, navnet på shell-scriptet. Parameteren tager den første variabel, der sendes til terminalen, tager den anden, den tredje og så videre.

Lad os oprette en script 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

Udfør derefter scriptet og angiv det første og andet navn som argumenterne:

# bash test.sh James Kiarie

Fra output kan vi se, at den første variabel, der udskrives, er navnet på shell-scriptet, i dette tilfælde test.sh. Derefter udskrives navnene svarende til de positionsparametre, der er defineret i shell-scriptet.

Positionsparametre er nyttige, da de hjælper dig med at tilpasse de data, der indtastes i stedet for eksplicit at tildele en værdi til en variabel.

Shell Command-udgangskoder

Lad os begynde med at besvare et simpelt spørgsmål: Hvad er en udgangskode?

Hver kommando, der udføres på skallen af en bruger eller et shell-script, har en exit-status. En udgangsstatus er et heltal.

En exit-status på 0 indebærer, at kommandoen blev udført med succes uden fejl. Alt mellem 1 og 255 viser, at kommandoen mislykkedes eller ikke blev udført med succes.

Brug 0 Shell-variablen for at finde udgangsstatus for en kommando.

En udgangsstatus på 1 peger på en generel fejl eller uacceptable fejl såsom redigering af filer uden sudotilladelser.

En exitstatus på 2 peger på forkert brug af en kommando eller indbygget shell-variabel.

127 exit-status peger på en ulovlig kommando, som normalt giver fejlen 'kommando ikke fundet'.

Behandling af output af shell-kommandoer i et script

I bash-scripting kan du gemme output fra en kommando i en variabel til fremtidig brug. Dette kaldes også shell-kommandosubstitution og kan opnås på følgende måder.

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

For eksempel kan du gemme dato-kommandoen i en variabel, der hedder i dag, og kalde shell-scriptet for at afsløre den aktuelle dato.

#!/bin/bash

today=$(date)

echo “Today is $today”

Lad os tage et andet eksempel. Antag, at du vil finde de gyldige login-brugere på dit Linux-system. Hvordan vil du gøre det? Først er listen over alle brugerne (både system-, proces- og loginbrugere) gemt i/etc/passwd-filen.

For at se filen skal du bruge cat-kommandoen. For at indsnævre for at logge på brugere skal du dog bruge kommandoen grep til at søge efter brugere med attributten/bin/bash og bruge kommandoen cut -c 1-10 som vist for at vise de første 10 tegn i navnene.

Vi har gemt cat-kommandoen til variablen login_users.

#!/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 vores tutorial om oprettelse af enkle shell-scripts til en ende. Vi håber, du fandt dette værdifuldt.