Bash scripts: början

Bash scripts: början
Bash Scripts Del 2: Loops
Bash-skript, del 3: Kommandoradsalternativ och växlar
Bash Scripts Del 4: Input och Output
Bash-skript, del 5: Signaler, bakgrundsuppgifter, skripthantering
Bash Scripts, del 6: Funktioner och biblioteksutveckling
Bash-skript, del 7: sed och ordbehandling
Bash-skript, del 8: awk databehandlingsspråk
Bash Scripts del 9: Reguljära uttryck
Bash Scripts Del 10: Praktiska exempel
Bash-skript, del 11: förvänta och automatisering av interaktiva verktyg

Idag ska vi prata om bash-skript. det här - kommandoradsskript, skrivet för bash-skalet. Det finns andra skal som zsh, tcsh, ksh, men vi kommer att fokusera på bash. Detta material är avsett för alla, det enda villkoret är förmågan att arbeta i kommandorad Linux.

Bash scripts: början

Kommandoradsskript är samlingar av samma kommandon som kan matas in från tangentbordet, samlas in i filer och förenas med något gemensamt syfte. I det här fallet kan resultaten av teamens arbete antingen vara av oberoende värde eller fungera som indata för andra team. Skript är ett kraftfullt sätt att automatisera ofta utförda åtgärder.

Bash scripts: början

Så, om vi pratar om kommandoraden, låter den dig utföra flera kommandon samtidigt genom att ange dem separerade med semikolon:

pwd ; whoami

Faktum är att om du provade detta i din terminal, har ditt första bash-skript som involverar två kommandon redan skrivits. Det fungerar så här. Laget först pwd visar information om den aktuella arbetskatalogen, sedan kommandot whoamivisar information om användaren du är inloggad som.

Med detta tillvägagångssätt kan du kombinera hur många kommandon du vill på en rad, den enda gränsen är det maximala antalet argument som kan skickas till programmet. Du kan definiera denna gräns med följande kommando:

getconf ARG_MAX

Kommandoraden är ett utmärkt verktyg, men du måste ange kommandon i den varje gång du behöver dem. Tänk om vi skrev en uppsättning kommandon i en fil och helt enkelt anropade den filen för att utföra dem? Faktum är att filen vi pratar om kallas ett kommandoradsskript.

Hur bash-skript fungerar

Skapa en tom fil med kommandot touch. Dess första rad måste indikera vilket skal vi ska använda. Vi är intresserade av bash, så den första raden i filen blir:

#!/bin/bash

Andra rader i den här filen använder hash-symbolen för att indikera kommentarer som skalet inte bearbetar. Den första raden är dock ett specialfall, det finns en hash följt av ett utropstecken (denna sekvens kallas shebang) och vägen till bash, indikera för systemet som skriptet skapades specifikt för bash.

Skalkommandon separeras av en radmatning, kommentarer separeras av ett hash-tecken. Så här ser det ut:

#!/bin/bash
# This is a comment
pwd
whoami

Här, precis som på kommandoraden, kan du skriva kommandon på en rad, separerade med semikolon. Men om du skriver kommandona på olika rader är filen lättare att läsa. I alla fall kommer skalet att bearbeta dem.

Ställa in skriptfilsbehörigheter

Spara filen och ge den ett namn myscript, och arbetet med att skapa bash-skriptet är nästan klart. Nu återstår bara att göra den här filen körbar, annars, om du försöker köra den, kommer du att stöta på ett fel Permission denied.

Bash scripts: början
Försöker köra en skriptfil med felaktigt konfigurerade behörigheter

Låt oss göra filen körbar:

chmod +x ./myscript

Låt oss nu försöka köra det:

./myscript

Efter att ha ställt in behörigheterna fungerar allt som det ska.

Bash scripts: början
Bash-skriptet körs framgångsrikt

Meddelandeutgång

Använd kommandot för att mata ut text till Linux-konsolen echo. Låt oss använda kunskapen om detta faktum och redigera vårt skript och lägga till förklaringar till data som matas ut av kommandona som redan finns i det:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Detta är vad som händer efter att ha kört det uppdaterade skriptet.

Bash scripts: början
Utmatning av meddelanden från ett skript

Nu kan vi visa förklarande anteckningar med kommandot echo. Om du inte vet hur man redigerar en fil med Linux-verktyg, eller om du inte har sett kommandot tidigare echo, ta en titt på detta материал.

Använda variabler

Variabler låter dig lagra information i en skriptfil, till exempel resultatet av kommandon, för användning av andra kommandon.

Det är inget fel med att utföra individuella kommandon utan att lagra deras resultat, men detta tillvägagångssätt är ganska begränsat i sina möjligheter.

Det finns två typer av variabler som kan användas i bash-skript:

  • Miljövariabler
  • Användarvariabler

Miljövariabler

Ibland måste skalkommandon fungera med vissa systemdata. Här är ett exempel på hur man visar den aktuella användarens hemkatalog:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Observera att vi kan använda en systemvariabel $HOME i dubbla citattecken kommer detta inte att hindra systemet från att känna igen det. Detta är vad du får om du kör scenariot ovan.

Bash scripts: början
Använda en miljövariabel i ett skript

Vad händer om du behöver visa ett dollartecken på skärmen? Låt oss prova detta:

echo "I have $1 in my pocket"

Systemet kommer att upptäcka ett dollartecken i en citerad sträng och antar att vi har refererat till en variabel. Skriptet kommer att försöka visa värdet på en odefinierad variabel $1. Det här är inte vad vi behöver. Vad ska man göra?

I den här situationen hjälper det att använda escape-tecken, ett snedstreck, innan dollartecknet:

echo "I have $1 in my pocket"

Skriptet kommer nu att mata ut exakt vad som förväntas.

Bash scripts: början
Använda en flyktsekvens för att skriva ut ett dollartecken

Användarvariabler

Förutom miljövariabler låter bash-skript dig definiera och använda dina egna variabler i skriptet. Sådana variabler har ett värde tills skriptet slutför exekvering.

Som med systemvariabler kan användarvariabler nås med hjälp av dollartecknet:
TNW-CUS-FMP - kampanjkod för 10% rabatt på våra tjänster, tillgänglig för aktivering inom 7 dagar

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Detta är vad som händer efter att ha kört ett sådant skript.

Bash scripts: början
Anpassade variabler i ett skript

Kommandosubstitution

En av de mest användbara funktionerna i bash-skript är möjligheten att extrahera information från kommandoutdata och tilldela den till variabler, så att du kan använda denna information var som helst i skriptfilen.

Detta kan göras på två sätt.

  • Använda backteck "`"
  • Genom design $()

När du använder den första metoden, var noga med att inte inkludera ett enda citattecken i stället för backtick. Kommandot måste omges av två sådana ikoner:

mydir=`pwd`

I det andra tillvägagångssättet skrivs samma sak så här:

mydir=$(pwd)

Och manuset kan sluta se ut så här:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Under dess drift, utmatningen av kommandot pwdkommer att sparas i en variabel mydir, vars innehåll, med hjälp av kommandot echo, kommer att gå till konsolen.

Bash scripts: början
Ett skript som sparar resultatet av ett kommando i en variabel

Matematiska operationer

För att utföra matematiska operationer i en skriptfil kan du använda en konstruktion som $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Bash scripts: början
Matematiska operationer i ett skript

om-då kontrollkonstruktion

I vissa scenarier måste du kontrollera flödet av kommandoexekvering. Till exempel, om ett visst värde är större än fem, måste du utföra en åtgärd, annars en annan. Detta är tillämpligt i många situationer och här kommer kontrollstrukturen att hjälpa oss if-then. I sin enklaste form ser det ut så här:

if команда
then
команды
fi

Här är ett fungerande exempel:

#!/bin/bash
if pwd
then
echo "It works"
fi

I det här fallet, om kommandot exekveras pwdkommer att slutföras framgångsrikt, kommer texten "det fungerar" att visas i konsolen.

Låt oss använda den kunskap vi har och skriva ett mer komplext manus. Låt oss säga att vi måste hitta en viss användare i /etc/passwd, och om du lyckades hitta den, rapportera att den finns.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Detta är vad som händer efter att ha kört det här skriptet.

Bash scripts: början
Användarsökning

Här använde vi kommandot grepför att söka efter en användare i en fil /etc/passwd. Om laget grepobekant för dig, dess beskrivning kan hittas här.

I det här exemplet, om användaren hittas, kommer skriptet att visa ett motsvarande meddelande. Vad händer om användaren inte kunde hittas? I det här fallet kommer skriptet helt enkelt att slutföra körningen utan att berätta något för oss. Vi vill att han också berättar om detta, så vi förbättrar koden.

om-då-annat kontrollkonstruktion

För att programmet ska kunna rapportera både resultat av en lyckad sökning och misslyckande kommer vi att använda konstruktionen if-then-else. Så här fungerar det:

if команда
then
команды
else
команды
fi

Om det första kommandot returnerar noll, vilket betyder att det kördes framgångsrikt, kommer villkoret att vara sant och exekveringen kommer inte att fortsätta längs grenen else. Annars, om något annat än noll returneras, vilket skulle indikera fel eller ett falskt resultat, kommandona efter else.

Låt oss skriva följande manus:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Hans avrättning gick i sjön else.

Bash scripts: början
Köra ett skript med en if-then-else-konstruktion

Nåväl, låt oss gå vidare och fråga oss själva om mer komplexa förhållanden. Vad händer om du behöver kontrollera inte ett tillstånd, utan flera? Till exempel, om den önskade användaren hittas ska ett meddelande visas, om något annat villkor är uppfyllt ska ett annat meddelande visas och så vidare. I en sådan situation kommer kapslade förhållanden att hjälpa oss. Det ser ut så här:

if команда1
then
команды
elif команда2
then
команды
fi

Om det första kommandot returnerar noll, vilket indikerar dess framgångsrika exekvering, kommer kommandona i det första blocket att utföras then, annars, om det första villkoret är falskt och om det andra kommandot returnerar noll, kommer det andra kodblocket att exekveras.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

I ett sådant skript kan du till exempel skapa en ny användare med kommandot useradd, om sökningen inte gav resultat, eller gör något annat användbart.

Jämförelse av siffror

I skript kan du jämföra numeriska värden. Nedan finns en lista över relevanta kommandon.

n1 -eq n2Returnerar sant om n1 är n2.
n1 -ge n2 Returnerar sant om n1mer eller lika n2.
n1 -gt n2Returnerar sant om n1 больше n2.
n1 -le n2Returnerar sant om n1mindre eller lika n2.
n1 -lt n2Returnerar sant om n1 är mindre än n2.
n1 -ne n2Returnerar sant om n1inte lika n2.

Som ett exempel, låt oss prova en av jämförelseoperatorerna. Observera att uttrycket omges av hakparenteser.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Detta är vad detta kommando kommer att mata ut.

Bash scripts: början
Jämförelse av siffror i skript

Variabelt värde val1större än 5, slutar grenen att exekveras thenjämförelseoperatör och ett motsvarande meddelande visas i konsolen.

Strängjämförelse

Skript kan också jämföra strängvärden. Jämförelseoperatorer ser ganska enkla ut, men strängjämförelseoperationer har vissa funktioner, som vi kommer att beröra nedan. Här är en lista över operatörer.

str1 = str2 Testar strängar för likhet, returnerar sant om strängarna är identiska.
str1 != str2Returnerar sant om strängarna inte är identiska.
str1 < str2Returnerar sant om str1mindre än str2.
str1 > str2 Returnerar sant om str1mer än str2.
-n str1 Returnerar sant om längden str1Över noll.
-z str1Returnerar sant om längden str1lika med noll.

Här är ett exempel på att jämföra strängar i ett skript:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Som ett resultat av att köra skriptet får vi följande.

Bash scripts: början
Jämföra strängar i skript

Här är en funktion av strängjämförelse som är värd att nämna. Operatörerna ">" och "<" måste nämligen escapes med ett omvänt snedstreck, annars kommer skriptet inte att fungera korrekt, även om inga felmeddelanden visas. Skriptet tolkar tecknet ">" som ett omdirigeringskommando för utdata.

Så här ser det ut att arbeta med dessa operatorer i kod:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Här är resultatet av manuset.

Bash scripts: början
Strängjämförelse, varning ges

Observera att skriptet, även om det körs, utfärdar en varning:

./myscript: line 5: [: too many arguments

För att bli av med denna varning, avslutar vi $val2 inom dubbla citattecken:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Nu fungerar allt som det ska.

Bash scripts: början
Strängjämförelse

En annan funktion hos operatorerna ">" och "<" är hur de fungerar med versaler och gemener. För att förstå den här funktionen, låt oss förbereda en textfil med följande innehåll:

Likegeeks
likegeeks

Låt oss spara den genom att ge den ett namn myfile, kör sedan följande kommando i terminalen:

sort myfile

Det kommer att sortera raderna från filen så här:

likegeeks
Likegeeks

Team sort, som standard, sorterar strängar i stigande ordning, det vill säga att den gemena bokstaven i vårt exempel är mindre än den stora. Låt oss nu förbereda ett skript som kommer att jämföra samma strängar:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Om du kör det visar det sig att allt är tvärtom - den gemena bokstaven är nu större än den stora.

Bash scripts: början
Sorteringskommandot och jämförande strängar i en skriptfil

I jämförelsekommandon är stora bokstäver mindre än gemener. Strängjämförelse här görs genom att jämföra tecknens ASCII-koder, sorteringsordningen beror alltså på teckenkoderna.

Team sort, använder i sin tur den sorteringsordning som anges i systemspråkinställningarna.

Filkontroller

Kanske används följande kommandon oftast i bash-skript. De låter dig kontrollera olika villkor för filer. Här är en lista över dessa kommandon.

-d fileKontrollerar om en fil finns och är en katalog.
-e fileKontrollerar om filen finns.
-f file Kontrollerar om en fil finns och är en fil.
-r fileKontrollerar om filen finns och är läsbar.
-s file ПKontrollerar om filen finns och inte är tom.
-w fileKontrollerar om filen finns och är skrivbar.
-x fileKontrollerar om filen finns och är körbar.
file1 -nt file2 Kollar om det är nyare file1än file2.
file1 -ot file2Kollar om det är äldre file1än file2.
-O file Kontrollerar om filen finns och ägs av den aktuella användaren.
-G fileKontrollerar om en fil finns och om dess grupp-ID matchar den aktuella användarens grupp-ID.

Dessa kommandon, liksom många andra som diskuteras idag, är lätta att komma ihåg. Deras namn, som är förkortningar av olika ord, indikerar direkt vilka kontroller de utför.

Låt oss prova ett av kommandona i praktiken:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Detta skript, för en befintlig katalog, visar dess innehåll.

Bash scripts: början
Lista innehållet i en katalog

Vi tror att du kan experimentera med de återstående kommandona själv, de används alla enligt samma princip.

Resultat av

Idag pratade vi om hur man kommer igång med att skriva bash-manus och täckte några grundläggande saker. Faktum är att ämnet bash-programmering är enormt. Den här artikeln är en översättning av den första delen av en stor serie med 11 material. Om du vill fortsätta just nu, här är en lista över originalen av dessa material. För enkelhetens skull ingår översättningen som du just läste av här.

  1. Bash Script steg för steg — här talar vi om hur man börjar skapa bash-skript, användningen av variabler övervägs, villkorliga strukturer, beräkningar, jämförelser av tal, strängar och att ta reda på information om filer beskrivs.
  2. Bash Scripting del 2, Bash the awesome — här avslöjas funktionerna i att arbeta med for- och while-slingor.
  3. Bash Scripting del 3, parametrar och alternativ — Detta material är ägnat åt kommandoradsparametrar och nycklar som kan skickas till skript, som arbetar med data som användaren anger och som kan läsas från filer.
  4. Bash Scripting Del 4, Input & Output - här pratar vi om fildeskriptorer och att arbeta med dem, om input, output, felströmmar och om output omdirigering.
  5. Bash Scripting Del 5, Sighals & Jobs — Detta material ägnas åt Linux-signaler, deras bearbetning i skript och lansering av skript enligt ett schema.
  6. Bash Scripting Del 6, Funktioner — här kan du lära dig att skapa och använda funktioner i skript och utveckla bibliotek.
  7. Bash Scripting Del 7, Använda sed — den här artikeln ägnas åt att arbeta med sed-strömningstextredigeraren.
  8. Bash Scripting del 8, Using awk — detta material ägnas åt programmering i det awk databehandlingsspråket.
  9. Bash Scripting Del 9, Reguljära uttryck — här kan du läsa om att använda reguljära uttryck i bash-skript.
  10. Bash Scripting Del 10, Praktiska exempel — här finns tekniker för att arbeta med meddelanden som kan skickas till användare, samt en metod för diskövervakning.
  11. Bash Scripting Del 11, Expect Command — Detta material är tillägnat Expect-verktyget, med vilket du kan automatisera interaktion med interaktiva verktyg. I synnerhet talar vi om förväntade manus och deras interaktion med bash-skript och andra program.

Vi tror att en av de värdefulla funktionerna i den här artikelserien är att den, från den enklaste, lämplig för användare på alla nivåer, gradvis leder till ganska allvarliga ämnen, vilket ger alla en chans att avancera i skapandet av Linux-kommandoradsskript .

Kära läsare! Vi ber bash-programmeringsguruer att prata om hur de nådde höjderna av sin behärskning, dela med sig av sina hemligheter och vi ser fram emot att få intryck från dem som precis har skrivit sitt första manus.

Bash scripts: början

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Ska jag översätta resten av artikelserien?

  • Yes!

  • Nej inget behov

1030 användare röstade. 106 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar