40 enkle, men effektive eksempler på Linux-shellskripter

Historisk set har shell’en været den oprindelige kommandolinjefortolker for Unix-lignende systemer. Det har vist sig at være en af Unix’ vigtigste funktioner gennem årene og voksede til et helt nyt emne i sig selv. Linux tilbyder en række kraftfulde shells med robust funktionalitet, herunder Bash, Zsh, Tcsh og Ksh. En af de mest fantastiske funktioner ved disse shells er deres programmerbarhed. Det er ganske let at oprette enkle, men effektive Linux-shell-scripts til at løse daglige opgaver. Desuden vil en beskeden viden om dette emne gøre dig til en Linux-powerbruger på ingen tid. Bliv hos os for at få en detaljeret introduktion til Unix shell scripting.

Linux Shell Script Eksempler

De fleste shell scripting udført på Linux involverer bash shell’en. Power-brugere, der har specificerede valgmuligheder, bruger ofte andre shells som Zsh og Ksh. Vi vil for det meste holde os til Linux bash-scripts i vores eksempler på grund af deres udbredte popularitet og enorme brugervenlighed. Vores redaktører har også forsøgt at skitsere nogle eksempler på shell-scripts, der omhandler andre shells end bash. Du vil finde en betydelig mængde kendskab mellem forskellige shell scripts.

Linux Bash-scripts

Bash aka Bourne Again Shell er standard kommandolinjefortolkeren i de fleste Linux-distroer i dag. Det er en opgradering af den tidligere Bourne-shell, der først blev introduceret i Version 7 Unix. Hvis du lærer bash-shell-scripting, vil du kunne forstå andre shell-scripts meget hurtigere. Så prøv selv disse enkle eksempler for at få førstehåndserfaring.

1. Hello World

Programmer lærer ofte nye sprog via at lære hello world-programmet. Det er et simpelt program, der udskriver strengen “Hello World” til standardudgangen. Brug en editor som f.eks. vim eller nano til at oprette filen hello-world.sh og kopier nedenstående linjer ind i den.

#!/bin/bashecho "Hello World"

Spar og afslut filen. Du skal gøre denne fil eksekverbar ved hjælp af nedenstående kommando.

$ chmod a+x hello-world.sh

Du kan køre dette ved hjælp af en af de to nedenstående kommandoer.

$ bash hello-world.sh$ ./hello-world.sh

Det vil udskrive den streng, der er overgivet til echo inde i scriptet.

2. Brug af echo til at udskrive

Echo-kommandoen bruges til at udskrive oplysninger i bash. Den svarer til C-funktionen ‘printf’ og giver mange almindelige muligheder, herunder escape-sekvenser og omdirigering.

Kopier nedenstående linjer til en fil kaldet echo.sh og gør den eksekverbar som gjort ovenfor.

#!/bin/bashecho "Printing text"echo -n "Printing text without newline"echo -e "\nRemoving \t special \t characters\n"

Kør scriptet for at se, hvad det gør. Indstillingen -e bruges til at fortælle echo, at den streng, der er overgivet til den, indeholder specialtegn og kræver udvidet funktionalitet.

3. Brug af kommentarer

Kommentarer er nyttige til dokumentation og er et krav til kodebaser af høj kvalitet. Det er en almindelig praksis at indsætte kommentarer inde i koder, der omhandler kritisk logik. Hvis du vil kommentere en linje, skal du blot bruge #(hash)-tegnet før den. Se nedenstående eksempel på et bash-script.

#!/bin/bash# Adding two values((sum=25+35))#Print the resultecho $sum

Dette script vil udgive tallet 60. Tjek, hvordan kommentarer bruges ved at bruge # før nogle linjer. Den første linje er dog en undtagelse. Den kaldes shebang og lader systemet vide, hvilken fortolker der skal bruges, når dette script køres.

4. Flerlinjede kommentarer

Mange mennesker bruger flerlinjede kommentarer til at dokumentere deres shellscripts. Se, hvordan dette gøres i det næste script kaldet comment.sh.

#!/bin/bash: 'This script calculatesthe square of 5.'((area=5*5))echo $area

Bemærk, hvordan flerlinjede kommentarer er placeret inden for :’ og ‘-tegn.

5. While-løkken

Som while-loop-konstruktionen bruges til at køre en instruktion flere gange. Tjek følgende script kaldet while.sh for at få en bedre forståelse af dette koncept.

#!/bin/bashi=0while doecho Number: $i((i++))done

Så while-loopet har nedenstående form.

while docommands 1commands ndone

Tommellemrummene omkring de firkantede parenteser er obligatoriske.

6. For-loopet

For-loopet er en anden meget anvendt bash-shell-konstruktion, der giver brugerne mulighed for at iterere over koder på en effektiv måde. Et simpelt eksempel er vist nedenfor.

#!/bin/bashfor (( counter=1; counter<=10; counter++ ))doecho -n "$counter "doneprintf "\n"

Spar denne kode i en fil med navnet for.sh, og kør den ved hjælp af ./for.sh. Glem ikke at gøre den eksekverbar. Dette program skal udskrive tallene 1 til 10.

7. Modtag input fra brugeren

Det er vigtigt at få brugerinput for at implementere brugerinteraktion i dine scripts. Nedenstående eksempel på et shell-script viser, hvordan man modtager brugerinput i et shell-program.

#!/bin/bashecho -n "Enter Something:"read somethingecho "You Entered: $something"

Så anvendes read-konstruktionen efterfulgt af et variabelnavn til at få brugerinput. Input gemmes inde i denne variabel og kan tilgås ved hjælp af $-tegnet.

8. If-erklæringen

If-erklæringer er den mest almindelige betingede konstruktion, der findes i Unix-shell-scripting, de har den form, der er vist nedenfor.

if CONDITION thenSTATEMENTSfi

Erklæringerne udføres kun, hvis BETINGELSEN er sand. Nøgleordet fi bruges til at markere slutningen af if-erklæringen. Et hurtigt eksempel er vist nedenfor.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."fi

Overstående program vil kun vise output, hvis det tal, der er angivet via input, er større end ti. -gt står for større end; på samme måde står -lt for mindre end; -le for mindre end lig; og -ge for større end lig. ] er påkrævet.

9. Mere kontrol ved hjælp af If Else

Kombination af else-konstruktionen med if giver meget bedre kontrol over dit scripts logik. Et simpelt eksempel er vist nedenfor.

#!/bin/bashread nif ;thenecho "It is a one digit number"elseecho "It is a two digit number"fi

Den else-del skal placeres efter handlingsdelen af if og før fi.

10. Brug af AND-operatoren

Med AND-operatoren kan vores program kontrollere, om flere betingelser er opfyldt på én gang eller ej. Alle dele, der er adskilt af en AND-operator, skal være sande. Ellers vil den erklæring, der indeholder AND, returnere falsk. Se følgende eksempel i bash-scriptet for at få en bedre forståelse af, hvordan AND fungerer.

#!/bin/bashecho -n "Enter Number:"read numif ]; thenecho "Even Number"elseecho "Odd Number"fi

Den AND-operatør betegnes med tegnet &&.

11. Brug af OR-operatoren

Overatoren OR er en anden vigtig konstruktion, der giver os mulighed for at implementere kompleks, robust programmeringslogik i vores scripts. I modsætning til AND returnerer en erklæring, der består af OR-operatoren, sandt, når en af operanderne er sandt. Den returnerer kun falsk, når hver operand, der er adskilt af OR, er falsk.

#!/bin/bashecho -n "Enter any number:"read nif ]thenecho "You won"elseecho "You lost!"fi

Dette enkle eksempel viser, hvordan OR-operatoren fungerer i Linux-shell-scripts. Det erklærer kun brugeren som vinder, når han indtaster tallet 15 eller 45. Tegnet || repræsenterer OR-operatoren.

12. Brug af elif

Elif-anvisningen står for else if og tilbyder en praktisk måde at implementere kædelogik på. Find ud af, hvordan elif fungerer ved at vurdere følgende eksempel.

#!/bin/bashecho -n "Enter a number: "read numif ]thenecho "Number is greater than 10."elif ]thenecho "Number is equal to 10."elseecho "Number is less than 10."fi

Det ovenstående program er selvforklarende, så vi vil ikke dissekere det linje for linje. Ændre dele af scriptet som f.eks. variabelnavne og værdier for at kontrollere, hvordan de fungerer sammen.

13. Switch-konstruktionen

Switch-konstruktionen er en anden kraftfuld funktion, der tilbydes af Linux bash-scripts. Det kan bruges, hvor der er behov for indlejrede betingelser, men hvor du ikke ønsker at bruge komplekse if-else-elif-kæder. Tag et kig på det næste eksempel.

#!/bin/bashecho -n "Enter a number: "read numcase $num in100)echo "Hundred!!" ;;200)echo "Double Hundred!!" ;;*)echo "Neither 100 nor 200" ;;esac

Betingelserne er skrevet mellem nøgleordene case og esac. *) bruges til at matche alle andre inddata end 100 og 200.

14. Kommandolinjeargumenter

Det kan være en fordel i en række tilfælde at få argumenter direkte fra kommandoskallen. Nedenstående eksempel viser, hvordan dette kan gøres i bash.

#!/bin/bashecho "Total arguments : $#"echo "First Argument = "echo "Second Argument = "

Kør dette script med to ekstra parametre efter dets navn. Jeg har kaldt det test.sh, og opkaldsproceduren er skitseret nedenfor.

$ ./test.sh Hey Howdy

Så $1 bruges til at få adgang til det første argument, $2 til det andet osv. $# bruges til at få det samlede antal argumenter.

15. Hentning af argumenter med navne

Nedenstående eksempel viser, hvordan man henter kommandolinjeargumenter med deres navne.

#!/bin/bashfor arg in "$@"doindex=$(echo $arg | cut -f1 -d=)val=$(echo $arg | cut -f2 -d=)case $index inX) x=$val;;Y) y=$val;;*)esacdone((result=x+y))echo "X+Y=$result"

Nævn dette script test.sh, og kald det som vist nedenfor.

$ ./test.sh X=44 Y=100

Det skal returnere X+Y=144. Argumenterne her er gemt i “$@”, og scriptet henter dem ved hjælp af Linux-kommandoen cut.

16. Sammenkædning af strenge

Strengebehandling er af ekstrem betydning for en lang række moderne bash-scripts. Heldigvis er det meget mere behageligt i bash og giver mulighed for en langt mere præcis og kortfattet måde at implementere dette på. Se nedenstående eksempel for et hurtigt indblik i bash-strengkonkatenation.

#!/bin/bashstring1="Ubuntu"string2="Pit"string=$string1$string2echo "$string is a great resource for Linux beginners."

Det følgende program udsender strengen “UbuntuPit is a great resource for Linux beginners.” til skærmen.

17. Skæring af strenge

I modsætning til mange programmeringssprog indeholder bash ikke nogen indbygget funktion til at skære dele af en streng fra. Nedenstående eksempel viser, hvordan dette kan gøres ved hjælp af parameterudvidelse.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"subStr=${Str:0:20}echo $subStr

Dette script bør udskrive “Lær bash-kommandoer” som sit output. Parameterudvidelsen har formen ${VAR_NAME:S:L}. Her angiver S startpositionen, og L angiver længden.

18. Udtrækning af delstrenge ved hjælp af Cut

Linux-kommandoen cut kan bruges inde fra dine scripts til at “klippe” en del af en streng, også kendt som delstrengen. Det næste eksempel viser, hvordan dette kan gøres.

#!/bin/bashStr="Learn Bash Commands from UbuntuPit"#subStr=${Str:0:20}subStr=$(echo $Str| cut -d ' ' -f 1-3)echo $subStr

Kig i denne vejledning for at forstå, hvordan Linux Cut-kommandoen fungerer.

19. Addering af to værdier

Det er ret nemt at udføre aritmetiske operationer inde i Linux-shellskripter. Nedenstående eksempel viser, hvordan man modtager to tal som input fra brugeren og adderer dem.

#!/bin/bashecho -n "Enter first number:"read xecho -n "Enter second number:"read y(( sum=x+y ))echo "The result of addition=$sum"

Som du kan se, er det forholdsvis ligetil at addere tal i bash.

20. Tilføjelse af flere værdier

Du kan bruge sløjfer til at få flere brugerinput og tilføje dem inde i dit script. De følgende eksempler viser dette i praksis.

#!/bin/bashsum=0for (( counter=1; counter<5; counter++ ))doecho -n "Enter Your Number:"read n(( sum+=n ))#echo -n "$counter "doneprintf "\n"echo "Result is: $sum"

Hvorimod udeladelse af (( )) vil resultere i sammenkædning af strenge i stedet for addition. Så tjek, om der er ting som dette i dit program.

21. Funktioner i Bash

Som med enhver programmeringsdialekt spiller funktioner en væsentlig rolle i Linux-shellskripter. De giver administratorer mulighed for at oprette brugerdefinerede kodeblokke til hyppig brug. Nedenstående demonstration vil skitsere, hvordan funktioner fungerer i Linux bash-scripts.

#!/bin/bashfunction Add(){echo -n "Enter a Number: "read xecho -n "Enter another Number: "read yecho "Adiition is: $(( x+y ))"}Add

Her har vi tilføjet to tal ligesom før. Men her har vi gjort arbejdet ved hjælp af en funktion kaldet Add. Så når du har brug for at tilføje igen, kan du bare kalde denne funktion i stedet for at skrive afsnittet igen.

22. Funktioner med returværdier

Et af de mest fantastiske træk ved funktioner er, at de gør det muligt at videregive data fra en funktion til en anden. Det er nyttigt i en lang række forskellige scenarier. Se det næste eksempel.

#!/bin/bashfunction Greet() {str="Hello $name, what brings you to UbuntuPit.com?"echo $str}echo "-> what's your name?"read nameval=$(Greet)echo -e "-> $val"

Her indeholder output data, der er modtaget fra funktionen Greet().

23. Oprettelse af mapper fra Bash-scripts

Muligheden for at køre systemkommandoer ved hjælp af shell-scripts gør det muligt for udviklere at være meget mere produktive. Det følgende enkle eksempel viser dig, hvordan du opretter en mappe fra et shellscript.

#!/bin/bashecho -n "Enter directory name ->"read newdircmd="mkdir $newdir"eval $cmd

Hvis du ser nærmere efter, kalder dette script blot din standard-shellkommando mkdir og giver den mappenavnet. Dette program bør oprette en mappe i dit filsystem. Du kan også sende den kommando, der skal udføres, inden for backticks(“) som vist nedenfor.

`mkdir $newdir`

24. Opret en mappe efter bekræftelse af eksistens

Overstående program vil ikke virke, hvis din aktuelle arbejdskatalog allerede indeholder en mappe med samme navn. Nedenstående program vil kontrollere, om der findes en mappe med navnet $dir, og kun oprette en, hvis den ikke finder nogen.

#!/bin/bashecho -n "Enter directory name ->"read dirif thenecho "Directory exists"else`mkdir $dir`echo "Directory created"fi

Skriv dette program ved hjælp af eval for at øge dine bash-scripting-færdigheder.

25. Læsning af filer

Bash-scripts giver brugerne mulighed for at læse filer meget effektivt. Nedenstående eksempel viser, hvordan man kan læse en fil ved hjælp af shellscripts. Opret en fil kaldet editors.txt med følgende indhold.

1. Vim 2. Emacs 3. ed 4. nano 5. Code

Dette script vil outputte hver af de ovenstående 5 linjer.

#!/bin/bashfile='editors.txt'while read line; doecho $linedone < $file

26. Sletning af filer

Det følgende program vil demonstrere, hvordan man sletter en fil i Linux-shell-scripts. Programmet vil først bede brugeren om at angive filnavnet som input og vil slette det, hvis det eksisterer. Linux rm-kommandoen udfører sletningen her.

#!/bin/bashecho -n "Enter filename ->"read namerm -i $name

Lad os skrive editors.txt som filnavn og trykke y, når vi bliver bedt om bekræftelse. Det skulle slette filen.

27. Tilføjelse til filer

Det nedenstående eksempel på et shellscript viser dig, hvordan du kan tilføje data til en fil på dit filsystem ved hjælp af bash-scripts. Det tilføjer en ekstra linje til den tidligere editors.txt-fil.

#!/bin/bashecho "Before appending the file"cat editors.txtecho "6. NotePad++" >> editors.txtecho "After appending the file"cat editors.txt

Du bør nu bemærke, at vi bruger almindelige terminalkommandoer direkte fra Linux bash-scripts.

28. Test filens eksistens

Det næste eksempel på et shellscript viser, hvordan man kan kontrollere eksistensen af en fil fra bash-programmer.

#!/bin/bashfilename=if ; thenecho "File exists"elseecho "File does not exist"fi

Vi overfører filnavnet som argument direkte fra kommandolinjen.

29. Send mails fra Shell-scripts

Det er ret ligetil at sende mails fra bash-scripts. Det følgende enkle eksempel viser en måde at gøre dette på fra bash-programmer.

#!/bin/bashrecipient="[email protected]"subject="Greetings"message="Welcome to UbuntuPit"`mail -s $subject $recipient <<< $message`

Det sender en e-mail til modtageren med det angivne emne og den angivne besked.

30. Parsing af dato og tid

Det næste bash-scripteksempel viser dig, hvordan du kan håndtere datoer og tider ved hjælp af scripts. Linux-kommandoen date bruges til at hente de nødvendige oplysninger, og vores program foretager parsningen.

#!/bin/bashyear=`date +%Y`month=`date +%m`day=`date +%d`hour=`date +%H`minute=`date +%M`second=`date +%S`echo `date`echo "Current Date is: $day-$month-$year"echo "Current Time is: $hour:$minute:$second"

Kør dette program for at se, hvordan det fungerer. Prøv også at køre datokommandoen fra din terminal.

31. Sleep-kommandoen

Sleep-kommandoen giver dit shellscript mulighed for at holde pause mellem instruktionerne. Den er nyttig i en række scenarier, f.eks. ved udførelse af opgaver på systemniveau. Det næste eksempel viser sleep-kommandoen i aktion fra et shellscript.

#!/bin/bashecho "How long to wait?"read timesleep $timeecho "Waited for $time seconds!"

Dette program sætter den sidste instruktions udførelse på pause indtil $time sekunder, som er angivet af brugeren i dette tilfælde.

32. Wait-kommandoen

Wait-kommandoen bruges til at sætte systemprocesser på pause fra Linux bash-scripts. Se det følgende eksempel for at få en detaljeret forståelse af, hvordan dette fungerer i bash.

#!/bin/bashecho "Testing wait command"sleep 5 &pid=$!kill $pidwait $pidecho $pid was terminated.

Kør selv dette program for at se, hvordan det fungerer.

33. Visning af den senest opdaterede fil

I nogle tilfælde kan du have brug for at finde den senest opdaterede fil til visse operationer. Det følgende enkle program viser os, hvordan vi kan gøre dette i bash ved hjælp af awk-kommandoen. Det viser enten den senest opdaterede eller oprettede fil i din aktuelle arbejdsmappe.

#!/bin/bashls -lrt | grep ^- | awk 'END{print $NF}'

For enkelhedens skyld undlader vi at beskrive, hvordan awk fungerer i dette eksempel. Du kan blot kopiere denne kode for at få opgaven udført.

34. Tilføjelse af batchudvidelser

Nedenstående eksempel vil anvende en brugerdefineret udvidelse på alle filerne i en mappe. Opret en ny mappe, og læg nogle filer i den til demonstrationsformål. Min mappe har i alt fem filer, der hver især hedder test efterfulgt af (0-4). Jeg har programmeret dette script til at tilføje (.UP) i slutningen af filerne. Du kan tilføje enhver udvidelse, du ønsker.

#!/bin/bashdir=for file in `ls /*`domv $file $file.UPdone

Først skal du ikke prøve dette script fra en almindelig mappe; kør det i stedet fra en testmappe. Desuden skal du angive mappenavnet på dine filer som et kommandolinjeargument. Brug punktum(.) for den aktuelle arbejdsmappe.

35. Udskriv antal filer eller mapper

Det nedenstående Linux bash-script finder antallet af filer eller mapper, der findes i en given mappe. Det anvender Linux-kommandoen find til at gøre dette. Du skal angive navnet på den mappe, hvor du vil søge efter filer fra kommandolinjen.

#!/bin/bashif ; thenecho "Files found: $(find "$@" -type f | wc -l)"echo "Folders found: $(find "$@" -type d | wc -l)"elseecho " Please retry with another folder."exit 1fi

Programmet beder brugeren om at prøve igen, hvis den angivne mappe ikke er tilgængelig eller har problemer med tilladelser.

36. Rensning af logfiler

Det næste enkle eksempel demonstrerer en praktisk måde, hvorpå vi kan bruge shell-scripts i det virkelige liv. Dette program vil simpelthen slette alle logfiler, der findes i din /var/log-mappe. Du kan ændre den variabel, der indeholder denne mappe, for at rydde op i andre logfiler.

#!/bin/bashLOG_DIR=/var/logcd $LOG_DIRcat /dev/null > messagescat /dev/null > wtmpecho "Logs cleaned up."

Husk at køre dette Linux-shellskript som root.

37. Backup-script ved hjælp af Bash

Shell-scripts giver en robust måde at sikkerhedskopiere dine filer og mapper på. Det følgende eksempel vil sikkerhedskopiere hver fil eller mappe, der er blevet ændret inden for de sidste 24 timer. Dette program anvender kommandoen find til dette formål.

#!/bin/bashBACKUPFILE=backup-$(date +%m-%d-%Y)archive=${1:-$BACKUPFILE}find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."exit 0

Det vil udskrive navnene på filerne og mapperne, efter at sikkerhedskopieringsprocessen er lykkedes.

38. Kontroller, om du er root

Det nedenstående eksempel viser en hurtig måde at finde ud af, om en bruger er root eller ej fra Linux bash-scripts.

#!/bin/bashROOT_UID=0if thenecho "You are root."elseecho "You are not root"fiexit 0

Opdatet af dette script afhænger af den bruger, der kører det. Det vil matche root-brugeren baseret på $UID.

39. Fjernelse af duplikerede linjer fra filer

Filbehandling tager betydelig tid og hæmmer administratorers produktivitet på mange måder. At søge efter dubletter i dine filer kan blive en skræmmende opgave. Heldigvis kan du gøre dette med et kort shell-script.

#! /bin/shecho -n "Enter Filename-> "read filenameif ; thensort $filename | uniq | tee sorted.txtelseecho "No $filename in $pwd...try again"fiexit 0

Overstående script går linje for linje gennem din fil og fjerner alle duplikerede linjer. Det placerer derefter det nye indhold i en ny fil og beholder den oprindelige fil intakt.

40. Systemvedligeholdelse

Jeg bruger ofte et lille Linux-shell-script til at opgradere mit system i stedet for at gøre det manuelt. Nedenstående simple shellscript viser dig, hvordan du kan gøre dette.

#!/bin/bashecho -e "\n$(date "+%d-%m-%Y --- %T") --- Starting work\n"apt-get updateapt-get -y upgradeapt-get -y autoremoveapt-get autocleanecho -e "\n$(date "+%T") \t Script Terminated"

Scriptet tager sig også af gamle pakker, som ikke længere er nødvendige. Du skal køre dette script ved hjælp af sudo, ellers vil det ikke fungere korrekt.

Sluttanker

Linux-shell scripts kan være så forskellige som du kan forestille dig. Der er bogstaveligt talt ingen grænser, når det kommer til at bestemme, hvad det kan gøre eller ikke kan gøre. Hvis du er en ny Linux-entusiast, kan vi varmt anbefale dig at mestre disse grundlæggende bash-script-eksempler. Du bør tweake dem for at forstå, hvordan de fungerer mere klart. Vi har gjort vores bedste for at give dig alle de væsentlige indsigter, der er nødvendige for moderne Linux bash-scripts. Vi har ikke berørt nogle tekniske spørgsmål af hensyn til enkelheden. Denne guide skulle dog vise sig at være et godt udgangspunkt for mange af jer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.