det finns två typer av bash för slingor tillgängliga. En med nyckelordet ”in” med lista över värden, en annan med C-programmering som syntax.
denna artikel är en del av vår pågående bash handledning serien.
detta förklarar båda bash för loop-metoderna och ger 12 olika exempel på hur du använder bash för loop i dina skalskript.
bokmärke den här artikeln för framtida referens, eftersom det här är den enda artikeln du någonsin skulle behöva referera till hur du använder bash för loopar med exempel.,
Metod 1: Bash för Loop med ”in” och lista över värden
Syntax:
for varname in listdo command1 command2 ..done
i ovanstående syntax:
- för, i, gör och gjort är nyckelord
- ”lista” innehåller lista över värden. Listan kan vara en variabel som innehåller flera ord åtskilda av mellanslag. Om listan saknas i for-satsen tar den positionsparametern som skickades in i skalet.
- varname är ett Bash-variabelnamn.
i detta formulär exekverar for-satsen de kommandon som är inneslutna i en kropp, en gång för varje objekt i listan., Till exempel, om listan med värden innehåller 5 objekt, kommer for loop att utföras totalt 5 gånger, en gång för varje objekt i listan. Det aktuella objektet från listan lagras i en variabel ”varname” varje gång genom slingan. Denna ”varname” kan bearbetas i for-slingans kropp.
Metod 2: Bash för Loop med C som syntax
den andra formen av for loop liknar For loop i ”C” programmeringsspråk, som har tre uttryck (initiering, tillstånd och uppdatering).,
for (( expr1; expr2; expr3 ))do command1 command2 ..done
i ovanstående bash för kommandosyntax,
- före den första iterationen utvärderas expr1. Detta används vanligtvis för att initiera variabler för slingan.
- alla uttalanden mellan do och done utförs upprepade gånger tills värdet av expr2 är sant.
- efter varje iteration av slingan utvärderas expr3. Detta används vanligtvis för att öka en slingräknare.
följande 12 exempel visar hur man bash för slingor på olika sätt.,
statiska värden för listan efter ”i” nyckelord
i följande exempel ges listan över värden (Mån, tis, ons, tors och FRE) direkt efter sökordet ”in” i bash för loop.
Varning: listan över värden ska inte separeras med kommatecken (Mån, tis, ons, tor, fre). Kommatecken kommer att behandlas som en del av värdet. i stället för ” Mon ” kommer den att använda ”Mon” som värde som visas i exemplet nedan.
Varning: listan över värden ska inte bifogas i en dubbel offert. (Mån Tis Ons Tor Fre)., Om du bifogar i dubbel citat, kommer det att behandlas som ett enda värde (i stället för 5 olika värden), som visas i exemplet nedan.
$ cat for1-wrong2.shi=1for day in "Mon Tue Wed Thu Fri"do echo "Weekday $((i++)) : $day"done$ ./for1-wrong2.shWeekday 1 : Mon Tue Wed Thu Fri
variabel för listan efter ”in” nyckelord
istället för att tillhandahålla värdena direkt i For loop kan du lagra värdena i en variabel och använda variabeln i For loop efter ”in” – nyckelordet, som visas i följande exempel.
Varning: som bästa praxis bör du alltid citera bash-variablerna när du hänvisar till dem. Det finns få undantag från denna regel om bästa praxis. Det här är en av dem., Om du dubbel citerar variabeln i detta för loop kommer listan med värden att behandlas som ett enda värde. Många faller i den här fällan. Var försiktig och dubbel citera inte din variabel i For loop.
ange inte listan; hämta den från positionsparametrarna
om du inte anger sökordet ” in ” följt av någon lista med värden i bash för loop, kommer den att använda positionsparametrarna (dvs. argumenten som skickas till skalskriptet).
Varning: Var försiktig om du använder den här metoden. Du bör inte inkludera sökordet ” in ” i For loop., Om du lämnar sökordet” i ” utan några värden, kommer det inte att använda positionsparametern som visas nedan. Det kommer inte att gå in i slingan. dvs för loop kommer aldrig att bli exekverad som visas i exemplet nedan.
$ cat for3-wrong.shi=1for day indo echo "Weekday $((i++)) : $day"done$ ./for3-wrong.sh Mon Tue Wed Thu Fri
Obs! se vår tidigare artikel för att förstå mer om bash-positionsparametrar.
Unix kommandoutmatning som listvärden efter ”i” nyckelord
Du kan använda utdata från alla UNIX / Linux-kommando som en lista över värden till for loop genom att innesluta kommandot i back-ticks ` ` som visas nedan.,
Loop genom filer och kataloger i A för loop
för att loop genom filer och kataloger under en viss katalog, Bara cd till den katalogen, och ge * i For loop som visas nedan.
följande exempel kommer att bläddra igenom alla filer och kataloger under din hemkatalog.
användning av * i bash for loop liknar filglobbing som vi använder i linux-kommandoraden när vi använder ls-kommandot (och andra kommandon).
till exempel kommer följande Att visa alla filer och kataloger under din hemkatalog., Detta är konceptet som används i ovanstående for5.sh exempel.
cd ~ls *
följande visar alla *.conf-fil som börjar med antingen a, b, eller c eller d under /etc katalogen.
$ ls -1 /etc/*.conf/etc/asound.conf/etc/autofs_ldap_auth.conf/etc/cas.conf/etc/cgconfig.conf/etc/cgrules.conf/etc/dracut.conf
samma argument som används i ls-kommandot ovan kan användas i en bash för loop, som visas i exemplet nedan.
Bryt ut ur for loop
Du kan bryta ut ur a för loop med kommandot ”break” som visas nedan.,
$ cat for6.shi=1for day in Mon Tue Wed Thu Frido echo "Weekday $((i++)) : $day" if ; then break; fidone$ ./for6.shWeekday 1 : MonWeekday 2 : Tue
Fortsätt från toppen av for loop
under vissa förutsättningar kan du ignorera resten av kommandona i For loop och fortsätta slingan från toppen igen (för nästa värde i listan) med kommandot fortsätt som visas nedan.
följande exempel lägger till ”(WEEKEND)” till Sat och Sun, och ”(weekday)” till resten av dagarna.
bash för loop med C-programsyntax
det här exemplet använder den andra metoden för bash för loop, som liknar C för loop syntax., Följande exempel genererar 5 slumptal med bash C-stil för loop.
9. Oändlig Bash för loop
När du inte ger start, skick och ökning i bash C-stil för loop, blir det oändlig loop. Du måste trycka på Ctrl – C för att stoppa slingan.
$ cat for9.shi=1;for (( ; ; ))do sleep $i echo "Number: $((i++))"done
som vi sa ovan, tryck Ctrl-C för att bryta ut ur denna bash oändlig för loop exempel.,
$ ./for9.shNumber: 1Number: 2Number: 3
använda komma i bash C-stil för loop
i Bash C-stil loop, förutom att öka värdet som används i villkoret, kan du också öka något annat värde som visas nedan.
i initialsektionen och inkrementsektionen i Bash C-style for loop kan du ha flera värden genom att separera med kommatecken som visas nedan.
följande för loop exekveras totalt 5 gånger, med hjälp av variabeln i. variabeln j börjar dock med 5 och får inkrement med 5 varje gång slingan exekveras.,
$ cat for10.shfor ((i=1, j=10; i <= 5 ; i++, j=j+5))do echo "Number $i: $j"done$ ./for10.shNumber 1: 10Number 2: 15Number 3: 20Number 4: 25Number 5: 30
antal nummer efter ”i” nyckelord
Du kan gå igenom med hjälp av olika nummer i For loop ”in” med hjälp av brace expansion.
följande exempel loopar genom 10 gånger med värdena 1 till 10.
$ cat for11.shfor num in {1..10}do echo "Number: $num"done$ ./for11.shNumber: 1Number: 2Number: 3Number: 4Number: 5...
antal nummer med steg efter ”i” nyckelord
följande exempel loopar genom 5 gånger med värdena 1 till 10, med en ökning på 2. dvs det börjar med 1 och fortsätter att öka med 2 tills det når 10.,
$ cat for12.shfor num in {1..10..2}do echo "Number: $num"done$ ./for12.shNumber: 1Number: 3Number: 5Number: 7Number: 9
PS: glöm inte att bokmärka den här artikeln för din framtida referens.
. – herr talman!.
|
|