Kiel Skribi BASH "por" Buklo

Kiel uzi la BASH "por" buklo en konkaj skriptoj

BASH (kiu signifas Bourne Again Shell) estas skripta lingvo uzata de plej multaj Linukso kaj UNIX-bazitaj operaciumoj.

Vi povas kuri BASH-komandojn ene de fina fenestro unu post la alia aŭ vi povas aldoni la komandojn al teksto-dosiero por krei ŝelon-skripton.

La granda afero pri skribado de ŝildaj skriptoj estas, ke vi povas kuri ilin denove kaj denove. Ekzemple, imagu, ke vi bezonas aldoni uzanton al sistemo, starigi siajn permesojn kaj administri sian komencan medion. Vi povas ankaŭ skribi la komandojn en papero kaj kuri ilin laŭ vi aldonas novajn uzantojn aŭ vi povas skribi solan skripton kaj nur pasi parametrojn en tiun skripton.

Skribantaj lingvoj kiel BASH havas similajn programadojn kiel aliajn lingvojn. Ekzemple, vi povas uzi importajn parametrojn por enigi el la klavaro kaj stoki ilin kiel variablojn. Vi povas tiam ricevi la skripton por plenumi certan agon bazitan sur la valoro de la enmetaj parametroj .

Ŝlosila parto de iu ajn programado kaj skripta lingvo estas la ebleco ruli la saman pecon de kodo denove kaj denove.

Ekzistas kelkaj manieroj ripeti kodon (ankaŭ konata kiel bukloj). En ĉi tiu gvidilo, vi montros kiel skribi "por" buklo.

Ĉar buklo ripetas certan sekcion de la kodo. Ili estas utilaj por ke serio da komandoj povas kuŝi ĝis aparta kondiĉo estas metita, post kiam ili haltos.

En ĉi tiu gvidilo, vi montriĝos kvin manierojn uzi la buklon ene de BASH-skripto.

Antaŭ Komenci

Antaŭ ol vi komenciĝos per la buklaj ekzemploj, vi devas malfermi fina stacion kaj sekvi ĉi tiujn paŝojn:

  1. Enmetu mkdir-skriptoj ( lernu pli pri mkdir ĉi tie )
  2. Enmetu cd-skriptoj (ĉi tio ŝanĝas la dosierujon al la skriptoj )
  3. Enmetu nano examplen.sh (kie n estas la ekzemplo, kiun vi laboras)
  4. Eniru la skripton
  5. Premu CTRL + O por savi kaj CTRL + X por eliri
  6. Run bash examplen.sh (denove, kun n kiel la ekzemplo, kiun vi laboras)

Kiel Kroĉi Tra Listo

#! / bin / bash
por numero en 1 2 3 4 5
faru
eĥo $ nombro
farita
eliro 0

La maniero BASH de uzi "por" bukloj estas iom malsama al la plej multaj aliaj programoj kaj skriblingvoj manipulas "por" bukloj. Ni rompu la skripton malsupren ...

En BASH "por" buklo ĉiuj, la deklaroj inter faru kaj faritaj estas faritaj unufoje por ĉiu ero en la listo.

En la supra ekzemplo, la listo estas ĉio, kio venas post la vorto (te 1 2 3 4 5).

Ĉiufoje kiam la buklo ripetas, la sekva valoro en la listo estas enmetita en la variablo specifitan post la vorto "por" . En la supra buklo, la variablo estas nomata nombro .

La eĥa aserto uzas por montri informojn al la ekrano.

Sekve, ĉi tiu ekzemplo prenas la nombrojn 1 ĝis 5 kaj ellasas ilin unu post unu al la ekrano:

Kiel Ŝovi Inter Komenco kaj Fina Punkto

La problemo kun la supra ekzemplo estas, ke se vi volas procesi pli grandan liston (diru 1 ĝis 500), ĝi prenus aĝojn tajpi ĉiujn nombrojn unue.

Ĉi tio alkondukas nin al la dua ekzemplo, kiu montras kiel specifi komencon kaj finan punkton:

#! / bin / bash
por nombro en {1..10}
faru
eĥo "$ nombro"
farita
eliro 0

La reguloj estas esence la samaj. La valoroj post la vorto " en" konsistigas la liston por redoni kaj ĉiu valoro en la listo estas metita en la variablo (te nombro), kaj ĉiufoje kiam la buklo ripetas, la deklaroj inter faroj kaj faroj estas plenumitaj.

La ĉefa diferenco estas kiel la listo estas formita. La buklaj krampoj {} esence signifas gamo, kaj la gamo, en ĉi tiu kazo, estas 1 ĝis 10 (la du punktoj apartigas la komencon kaj finon de gamo).

Ĉi tiu ekzemplo, sekve, kuras tra ĉiu nombro inter 1 kaj 10 kaj eligas la numeron al la ekrano kiel sekvas:

La sama buklo povus esti skribita kiel ĉi tio, kun sintakso identa al la unua ekzemplo:

por numero en 1 2 3 4 5 6 7 8 9 10

Kiel Preterpasi Nombrojn en Gamo

La antaŭa ekzemplo montris kiel buklo inter komenco kaj fino, do nun ni rigardos kiel forviŝi nombrojn en la gamo.

Imagu, ke vi volas buklo inter 0 kaj 100 sed nur montras ĉiun dekonon. La sekva skripto montras kiel fari nur tion:

#! / bin / bash
por nombro en {0..100..10}
faru
eĥo "$ nombro"
farita
eliro 0

La reguloj estas esence la samaj. Estas listo, variablo, kaj aro de deklaroj faritaj inter fari kaj farita . La listo ĉi-foje similas ĉi tion: {0..100..10}.

La unua nombro estas 0 kaj la fina nombro estas 100. La tria nombro (10) estas la nombro da eroj en la listo, kiun ĝi forgesos.

La supra ekzemplo, sekve, montras la jenan rezulton:

Pli tradicia Serĉado pri Cirklo

La maniero de skribi Bash por bukloj estas iomete stranga kompare al aliaj programlingvoj.

Vi povas, tamen, skribi por buklo en simila stilo al la lingvo de programado C, kiel ĉi tiu:

#! / bin / bash
por ((numero = 1; nombro <100; nombro ++))
{
se (($ numero% 5 == 0))
tiam
eĥo "$ nombro estas dividebla per 5"
fi
}
eliro 0

La buklo komenciĝas per difini la variablon al 1 (numero = 1 ). La buklo restos ripetanta dum la valoro de nombro estas malpli ol 100 ( nombro <100 ). La valoro de nombro ŝanĝas aldonante 1 al ĝi post ĉiu ripeto ( nombro ++ ).

Ĉio inter la buklaj krampoj estas farita per ĉiu ripeto de la buklo.

La bito inter la krampoj kontrolas la valoron de numero , dividas ĝin per 5, kaj komparas la restaĵon al 0. Se la resto estas 0 tiam la nombro estas dividebla per 5 kaj tiam estas montrita sur la ekrano.

Ekzemple:

Se vi volas ŝanĝi la paŝan grandecon de la iteracio, vi povas modifi la numeron ++-sekcio por esti numero = numero + 2 , numero = numero + 5 , aŭ numero = nombro + 10 ktp.

Ĉi tio povas esti pli reduktita al nombro + = 2nombro + = 5 .

Praktika Ekzemplo

Por cikloj povas fari pli ol forigi listojn de nombroj. Vi povas efektive uzi la eliron de aliaj komandoj kiel la listo.

La sekva ekzemplo montras kiel konverti aŭdajn dosierojn de MP3 ĝis WAV :

#! / bin / bash

La listo en ĉi tiu ekzemplo estas ĉiun dosieron kun la .MP3-etendo en la nuna dosierujo kaj la variablo estas dosiero .

La mpg- komando konvertas la MP3-dosieron en WAV. Tamen, vi eble bezonos instali ĉi tion per via paka administraĵo unue.