40 enkla men effektiva Linux Shell Script Examples

Historiskt sett har skalet varit den ursprungliga kommandoradstolkaren för Unix-liknande system. Det har visat sig vara en av Unix viktigaste funktioner genom åren och växte till ett helt nytt ämne i sig självt. Linux erbjuder en mängd kraftfulla skal med robust funktionalitet, bland annat Bash, Zsh, Tcsh och Ksh. En av de mest fantastiska funktionerna hos dessa skal är deras programmerbarhet. Det är ganska lätt att skapa enkla men effektiva Linux-skalskript för att ta itu med dagliga jobb. Dessutom kommer en blygsam kunskap om detta ämne att göra dig till en Linux power user på nolltid. Följ med oss för att få en detaljerad introduktion till Unix shell scripting.

Linux Shell Scripting Examples

Majoriteten av shell scripting som görs på Linux involverar bash shell. Kraftanvändare som har specificerade valmöjligheter använder ofta andra skal som Zsh och Ksh. Vi kommer mestadels att hålla oss till Linux bash-skript i våra exempel på grund av deras utbredda popularitet och enorma användbarhet. Våra redaktörer har också försökt att beskriva några exempel på skalskript som handlar om andra skal än bash. Du kommer att hitta en betydande mängd bekantskap mellan olika skalskript.

Linux Bash Scripts

Bash aka Bourne Again Shell är standardkommandotolkaren i de flesta Linuxdistributioner nuförtiden. Det är en uppgradering av det tidigare Bourne shell som först introducerades i Version 7 Unix. Om du lär dig bash shell scripting kommer du att förstå andra shell scripting mycket snabbare. Så prova själv dessa enkla exempel för att få förstahandserfarenhet.

1. Hello World

Programmerare lär sig ofta nya språk genom att lära sig programmet hello world. Det är ett enkelt program som skriver ut strängen ”Hello World” till standardutgången. Använd en editor som vim eller nano för att skapa filen hello-world.sh och kopiera nedanstående rader till den.

#!/bin/bashecho "Hello World"

Spara och avsluta filen. Du måste göra den här filen körbar med hjälp av nedanstående kommando.

$ chmod a+x hello-world.sh

Du kan köra den här filen med hjälp av någon av de två nedanstående kommandona.

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

Det kommer att skriva ut strängen som överlämnats till echo inne i skriptet.

2. Användning av echo för att skriva ut

Kommandot echo används för att skriva ut information i bash. Det liknar C-funktionen ”printf” och ger många vanliga alternativ, inklusive escape-sekvenser och omdirigering.

Kopiera nedanstående rader till en fil som heter echo.sh och gör den körbar på samma sätt som ovan.

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

Kör skriptet för att se vad det gör. Alternativet -e används för att tala om för echo att strängen som överlämnats innehåller specialtecken och kräver utökad funktionalitet.

3. Användning av kommentarer

Kommentarer är användbara för dokumentation och är ett krav för kodbaser av hög kvalitet. Det är vanligt att sätta kommentarer inuti koder som behandlar kritisk logik. För att kommentera en rad är det bara att använda tecknet #(hash) före den. Titta på nedanstående exempel på ett bash-skript:

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

Detta skript kommer att ge ut siffran 60. Kontrollera hur kommentarer används genom att använda # före vissa rader. Den första raden är dock ett undantag. Den kallas shebang och låter systemet veta vilken tolk som ska användas när det här skriptet körs.

4. Flerradiga kommentarer

Många använder sig av flerradiga kommentarer för att dokumentera sina skalskript. Kontrollera hur detta görs i nästa skript som heter comment.sh.

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

Bemärk hur flerradiga kommentarer placeras inuti :’ och ’ tecken.

5. While-slingan

Som en while-slinga används för att köra en instruktion flera gånger. Kolla in följande skript som heter while.sh för att få en bättre förståelse för det här konceptet.

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

Så, while-slingan har nedanstående form.

while docommands 1commands ndone

Utrymmet som omger de fyrkantiga parenteserna är obligatoriskt.

6. For-slingan

For-slingan är en annan mycket använd konstruktion för bash-skalet som gör det möjligt för användarna att iterera över koder på ett effektivt sätt. Ett enkelt exempel visas nedan.

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

Spara den här koden i en fil med namnet for.sh och kör den med ./for.sh. Glöm inte att göra den körbar. Det här programmet ska skriva ut siffrorna 1 till 10.

7. Ta emot input från användaren

Att ta emot input från användaren är avgörande för att implementera användarinteraktion i dina skript. Nedanstående exempel på ett skalskript visar hur man tar emot användarinmatning i ett skalprogram.

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

Så används read-konstruktionen följt av ett variabelnamn för att ta emot användarinmatning. Inmatningen lagras i denna variabel och kan nås med hjälp av $-tecknet.

8. If-uttalandet

If-uttalanden är den vanligaste villkorskonstruktionen som finns tillgänglig i Unix skalskript, de har den form som visas nedan.

if CONDITION thenSTATEMENTSfi

Uttalandena exekveras endast om CONDITIONEN är sann. Nyckelordet fi används för att markera slutet på if-anvisningen. Ett snabbt exempel visas nedan.

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

Ovanstående program visar endast utgången om det antal som anges via inmatningen är större än tio. -gt står för större än; på samma sätt -lt för mindre än; -le för mindre än lika; och -ge för större än lika. ] krävs.

9. Mer kontroll med If Else

Kombinera else-konstruktionen med if ger mycket bättre kontroll över logiken i ditt skript. Ett enkelt exempel visas nedan.

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

Den andra delen måste placeras efter handlingsdelen i if och före fi.

10. Användning av AND-operatorn

Med AND-operatorn kan vårt program kontrollera om flera villkor är uppfyllda samtidigt eller inte. Alla delar som separeras av en AND-operator måste vara sanna. I annat fall kommer påståendet som innehåller AND att återge falskt. Kontrollera följande exempel på ett bash-skript för att få en bättre förståelse för hur AND fungerar.

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

Operatorn AND betecknas med tecknet &&.

11. Användning av OR-operatorn

Ordern OR är en annan viktig konstruktion som gör att vi kan implementera komplex och robust programmeringslogik i våra skript. I motsats till AND returnerar ett uttalande som består av OR-operatorn sant när någon av dess operander är sann. Det returnerar falskt endast när varje operand som separeras av OR är falsk.

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

Detta enkla exempel visar hur OR-operatorn fungerar i Linux skalskript. Det förklarar användaren som vinnare endast när han anger siffran 15 eller 45. Tecknet || representerar OR-operatören.

12. Användning av Elif

Elif-angivelsen står för else if och erbjuder ett bekvämt sätt att implementera kedjelogik. Ta reda på hur elif fungerar genom att bedöma följande exempel.

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

Programmet ovan är självförklarande, så vi kommer inte att dissekera det rad för rad. Ändra delar av skriptet som variabelnamn och värden för att kontrollera hur de fungerar tillsammans.

13. Switch-konstruktionen

Switch-konstruktionen är en annan kraftfull funktion som erbjuds i Linux bash-skript. Den kan användas när det krävs inbäddade villkor, men du vill inte använda komplexa if-else-elif-kedjor. Ta en titt på nästa exempel.

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

Villkoren skrivs mellan nyckelorden case och esac. *) används för att matcha alla andra ingångar än 100 och 200.

14. Kommandoradsargument

Att få argument direkt från kommandoraden kan vara fördelaktigt i ett antal fall. Nedanstående exempel visar hur man gör detta i bash.

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

Kör det här skriptet med två ytterligare parametrar efter dess namn. Jag har döpt det till test.sh och anropsproceduren beskrivs nedan.

$ ./test.sh Hey Howdy

Så, $1 används för åtkomst till det första argumentet, $2 för det andra och så vidare. $# används för att få fram det totala antalet argument.

15. Hämta argument med namn

Understående exempel visar hur man hämtar kommandoradsargument med deras namn.

#!/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ämn det här skriptet test.sh och anropa det enligt nedanstående exempel.

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

Det ska ge X+Y=144. Argumenten lagras i ”$@” och skriptet hämtar dem med hjälp av Linux kommandot cut.

16. Sammanfogning av strängar

Strängbearbetning är av yttersta vikt för ett stort antal moderna bash-skript. Tack och lov är det mycket bekvämare i bash och möjliggör ett mycket mer exakt och kortfattat sätt att implementera detta. Se nedanstående exempel för en snabb titt på strängsammanbindning i bash.

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

Följande program matar ut strängen ”UbuntuPit is a great resource for Linux beginners.” till skärmen.

17. Skärning av strängar

I motsats till många programmeringsspråk har bash ingen inbyggd funktion för att skära av delar av en sträng. Nedanstående exempel visar hur detta kan göras med hjälp av parameterexpansion.

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

Det här skriptet bör skriva ut ”Learn Bash Commands” som utdata. Parameterexpansionen har formen ${VAR_NAME:S:L}. Här anger S startpositionen och L längden.

18. Extrahera delsträngar med hjälp av Cut

Linux kommandot cut kan användas inifrån dina skript för att ”klippa” en del av en sträng, även kallad delsträng. Nästa exempel visar hur detta kan göras.

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

Kolla på den här guiden för att förstå hur Linux Cut-kommando fungerar.

19. Addera två värden

Det är ganska enkelt att utföra aritmetiska operationer i Linux skalskript. Nedanstående exempel visar hur man tar emot två tal som indata från användaren och adderar 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 är det ganska enkelt att addera tal i bash.

20. Lägga till flera värden

Du kan använda slingor för att få flera användarinmatningar och lägga till dem i ditt skript. Följande exempel visar detta i praktiken.

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

Om du utelämnar (( )) kommer det dock att resultera i strängkonkatenation snarare än addition. Kontrollera därför om det finns sådana saker i ditt program.

21. Funktioner i Bash

Som i alla programmeringsdialekter spelar funktioner en viktig roll i Linux skalskript. De gör det möjligt för administratörer att skapa anpassade kodblock för frekvent användning. Nedanstående demonstration visar hur funktioner fungerar i Linux bash-skript.

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

Här har vi lagt till två siffror precis som tidigare. Men här har vi gjort arbetet med hjälp av en funktion som heter Add. Så när du behöver addera igen kan du bara anropa den här funktionen i stället för att skriva avsnittet igen.

22. Funktioner med returvärden

En av de mest fantastiska egenskaperna hos funktioner är att de gör det möjligt att skicka data från en funktion till en annan. Det är användbart i en mängd olika scenarier. Kolla in nästa exempel.

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

Här innehåller utgången data som tagits emot från funktionen Greet().

23. Skapa kataloger från Bash-skript

Möjligheten att köra systemkommandon med hjälp av skalskript gör att utvecklare kan vara mycket mer produktiva. Följande enkla exempel visar hur man skapar en katalog från ett skalskript.

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

Om du tittar noga så anropar det här skriptet helt enkelt ditt standardskalkommando mkdir och skickar katalognamnet till det. Det här programmet bör skapa en katalog i ditt filsystem. Du kan också skicka kommandot som ska exekveras inuti backticks(”) som visas nedan.

`mkdir $newdir`

24. Skapa en katalog efter att ha bekräftat existensen

Ovanstående program fungerar inte om din nuvarande arbetskatalog redan innehåller en mapp med samma namn. Nedanstående program kontrollerar om det finns en mapp med namnet $dir och skapar en mapp endast om den inte hittar någon.

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

Skriv det här programmet med hjälp av eval för att öka dina bash-skriptkunskaper.

25. Läsa filer

Bash-skript gör det möjligt för användare att läsa filer på ett mycket effektivt sätt. Nedanstående exempel visar hur man läser en fil med hjälp av skalskript. Skapa en fil som heter editors.txt med följande innehåll:

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

Detta skript kommer att skriva ut var och en av ovanstående 5 rader.

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

26. Radering av filer

Följande program visar hur man raderar en fil i Linux skalskript. Programmet kommer först att be användaren att ange filnamnet som indata och kommer att radera det om det finns. Linux rm-kommandot gör raderingen här.

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

Låt oss skriva in editors.txt som filnamn och trycka på y när vi blir tillfrågade om bekräftelse. Det borde radera filen.

27. Lägga till filer

Det nedanstående exemplet med skalskript visar hur du lägger till data till en fil i ditt filsystem med hjälp av bash-skript. Det lägger till ytterligare en rad till den tidigare editors.txt-filen.

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

Du bör märka vid det här laget att vi använder vardagliga terminalkommandon direkt från Linux bash-skript.

28. Testa filens existens

Nästa exempel på skalskript visar hur man kontrollerar att en fil finns från bash-program.

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

Vi skickar filnamnet som argument direkt från kommandoraden.

29. Skicka e-post från skalskript

Det är ganska enkelt att skicka e-post från bash-skript. Följande enkla exempel visar ett sätt att göra detta från bash-program.

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

Det skickar ett e-postmeddelande till mottagaren med det angivna ämnet och meddelandet.

30. Parsning av datum och tid

Nästa exempel på bash-skript visar hur man hanterar datum och tid med hjälp av skript. Linux date-kommandot används för att få den nödvändiga informationen, och vårt program gör analysen.

#!/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 det här programmet för att se hur det fungerar. Prova också att köra datumkommandot från din terminal.

31. Sleep-kommandot

Med sleep-kommandot kan ditt skalskript pausa mellan instruktionerna. Det är användbart i ett antal scenarier, till exempel för att utföra jobb på systemnivå. Nästa exempel visar sleep-kommandot i aktion från ett skalskript.

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

Detta program pausar exekveringen av den senaste instruktionen fram till $time sekunder, som i det här fallet anges av användaren.

32. Wait-kommandot

Wait-kommandot används för att pausa systemprocesser från Linux bash-skript. Kolla in följande exempel för en detaljerad förståelse för hur detta fungerar i bash.

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

Kör det här programmet själv för att se hur det fungerar.

33. Visa den senast uppdaterade filen

Ibland kan du behöva hitta den senast uppdaterade filen för vissa operationer. Följande enkla program visar hur man gör detta i bash med hjälp av awk-kommandot. Det listar antingen den senast uppdaterade eller skapade filen i din aktuella arbetskatalog.

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

För enkelhetens skull undviker vi att beskriva hur awk fungerar i det här exemplet. Du kan helt enkelt kopiera den här koden för att få uppgiften gjord.

34. Lägga till batchutökningar

Med nedanstående exempel appliceras ett anpassat tillägg på alla filer i en katalog. Skapa en ny katalog och lägg några filer i den i demonstrationssyfte. Min mapp har totalt fem filer som alla heter test följt av (0-4). Jag har programmerat det här skriptet så att det lägger till (.UP) i slutet av filerna. Du kan lägga till vilket tillägg som helst.

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

För det första ska du inte prova det här skriptet från en vanlig katalog, utan kör det från en testkatalog. Dessutom måste du ange katalognamnet för dina filer som ett kommandoradsargument. Använd punkt(.) för den aktuella arbetskatalogen.

35. Skriv ut antal filer eller kataloger

Det nedanstående Linux bash-skriptet hittar antalet filer eller mappar som finns i en viss katalog. Det använder Linux kommandot find för att göra detta. Du måste ange katalognamnet där du vill söka efter filer från kommandoraden.

#!/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 ber användaren att försöka igen om den angivna katalogen inte är tillgänglig eller om det finns behörighetsproblem.

36. Rengöring av loggfiler

Nästa enkla exempel visar ett praktiskt sätt att använda skalskript i verkligheten. Det här programmet raderar helt enkelt alla loggfiler som finns i din katalog /var/log. Du kan ändra variabeln som innehåller denna katalog för att rensa andra loggfiler.

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

Håll dig till att köra det här Linux-skriptet som root.

37. Skript för säkerhetskopiering med Bash

Skalskript är ett robust sätt att säkerhetskopiera dina filer och kataloger. Följande exempel säkerhetskopierar varje fil eller katalog som har ändrats under de senaste 24 timmarna. Det här programmet använder kommandot find för att göra detta.

#!/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 kommer att skriva ut namnen på filerna och katalogerna efter att säkerhetskopieringen har lyckats.

38. Kontrollera om du är root

Understående exempel visar ett snabbt sätt att ta reda på om en användare är root eller inte från Linux bash-skript.

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

Utgången av detta skript beror på vilken användare som kör det. Det kommer att matcha root-användaren baserat på $UID.

39. Ta bort dubbla rader från filer

Filhantering tar mycket tid och hämmar administratörernas produktivitet på många sätt. Att söka efter dubbletter i filerna kan bli en skrämmande uppgift. Som tur är kan du göra detta med ett kort skalskript.

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

Skriptet ovan går linje för linje genom din fil och tar bort alla dubbletter. Det placerar sedan det nya innehållet i en ny fil och håller den ursprungliga filen intakt.

40. Systemunderhåll

Jag använder ofta ett litet Linux-skalskript för att uppgradera mitt system i stället för att göra det manuellt. Nedanstående enkla skalskript visar hur man gör detta.

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

Skriptet tar också hand om gamla paket som inte längre behövs. Du måste köra det här skriptet med sudo annars kommer det inte att fungera korrekt.

Sluttande tankar

Linux skalskript kan vara så olika som du kan föreställa dig. Det finns bokstavligen ingen gräns när det gäller att bestämma vad det kan göra eller inte. Om du är en ny Linuxentusiast rekommenderar vi starkt att du behärskar dessa grundläggande exempel på bash-skript. Du bör finjustera dem för att förstå hur de fungerar tydligare. Vi har gjort vårt bästa för att ge dig alla viktiga insikter som behövs för moderna Linux bash-skript. Vi har inte berört vissa tekniska frågor på grund av enkelhetens skull. Den här guiden bör dock visa sig vara en bra utgångspunkt för många av er.

Lämna ett svar

Din e-postadress kommer inte publiceras.