Viss, kas jums jāzina par Bash for Loops Linux

Viss, kas jums jāzina par Bash for Loops Linux

Bash skripti ir ļoti efektīvs līdzeklis uzdevumu automatizēšanai, jo īpaši tiem, kas izmanto citu esošo programmu priekšrocības. Šī automatizācija bieži prasa atkārtot līdzīgu darbību vairākas reizes, tieši tā cilpai nonāk savā.





Linux un Mac sistēmas administratori parasti ir pazīstami ar skriptu rakstīšanu, izmantojot termināli, bet pat Windows lietotāji to var iesaistīties darbībā ar Windows apakšsistēmu Linux .





Kā darbojas Bash Scripts

Bash skripts ir vienkāršs teksta fails, kurā ir virkne komandu, kuras bash apvalks var lasīt un izpildīt. Bash ir noklusējuma apvalks pirms Catalina MacOS un lielākajā daļā Linux izplatījumu.





Ja jūs nekad iepriekš neesat strādājis ar čaulas skriptu, jums jāsāk ar absolūti vienkāršāko gadījumu. Tas ļaus jums praktizēt galvenos jēdzienus, ieskaitot skripta izveidi un tā izpildi.

Vispirms izveidojiet šādu failu ērtā vietā (ideālā gadījumā atveriet termināli un vispirms dodieties uz vajadzīgo direktoriju):



#!/bin/bash
echo 'Hello, World'

Pirmajā rindā ir norādīts, kā palaist šo programmu (piemēram, izmantojot bash tulku). Otrais ir tikai komanda, tāpat kā jebkura cita, ko jūs varētu ievadīt komandrindā. Saglabājiet šo failu kā labdien_pasaule.sh , tad:

$ chmod +x hello_world.sh
$ ./hello_world.sh

The chmod komanda pirmajā rindā padara failu izpildāmu, kas nozīmē, ka to var palaist, ierakstot tā nosaukumu, tāpat kā otrajā rindā.





Ja redzat vārdus Sveiki, Pasaule parādās drukāti uz līnijas jūsu terminālī, tad viss darbojas kā nepieciešams.

Kā darbojas cilpas

Vispārējā programmēšanā ir divi galvenie cilpas veidi: skaitlisks un katram . Ciparu veids tradicionāli ir visizplatītākais, bet bash lietojumā tas parasti ir otrādi.





Cilpu cipari parasti koncentrējas uz vienu veselu skaitli, kas nosaka atkārtojumu skaitu, piemēram:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

Šī ir pazīstama cilpa, kas atkārtosies tieši 100 reizes, ja vien cilpā netiks mainīts i vai kāds cits paziņojums neļaus for cilpas izpildi apturēt.

Turpretī Foreach cilpas mēdz darboties tādās struktūrās kā saraksti vai masīvi un atkārtot katru vienumu šajā kolekcijā:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

Dažās valodās tiek izmantota nedaudz atšķirīga sintakse, kas maina apkopošanas secību un vienumu:

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

Par cilpām

Bashā, sludinātājs - vai par - cilpa ir biežāk sastopama. Pamata sintakse ir vienkārši:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Piemēram, atkārtot, izmantojot trīs skaidri nosauktus failus:

izrakstīties no visām ierīcēm
for file in one.c two.c three.c
do
ls '$file'
done

Ja šādi faili pastāv pašreizējā direktorijā, šī skripta izvade būs šāda:

one.c
two.c
three.c

Fiksētas failu kopas vietā sarakstu var iegūt, izmantojot globālo modeli (viens ietver aizstājējzīmes - īpašas rakstzīmes, kas apzīmē citas rakstzīmes). Šajā piemērā for for atkārtojas visos failos (pašreizējā direktorijā), kuru nosaukumi beidzas ar '.xml':

for file in *.xml
do
ls -l '$file'
done

Šeit ir daži izvades piemēri:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Tas var izskatīties pēc ilgstoša veida:

$ ls -l *.xml

Bet ir būtiska atšķirība: for cilpa izpilda ls programma 2 atsevišķas reizes, katru reizi tai nododot vienu faila nosaukumu. Atsevišķā ls piemērā globālais modelis (*.xml) vispirms atbilst failu nosaukumiem un pēc tam nosūta tos visus kā atsevišķus komandrindas parametrus uz vienu gadījumu ls .

Šeit ir piemērs, kas izmanto tualete (vārdu skaita) programma, lai padarītu atšķirību skaidrāku:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

The tualete programma saskaita rindu skaitu katrā failā atsevišķi, pēc tam izdrukā to kopējo skaitu. Turpretī, ja tualete darbojas for cilpas ietvaros:

for file in *.xml
do
wc -l $file
done

Jūs joprojām redzēsit katra faila skaitu:

44 feed.xml
231 sitemap.xml

Bet nav kopsavilkuma kopsummas, jo tualete tiek palaists atsevišķi, katru reizi, kad cilpa atkārtojas.

Ja saraksts nav saraksts

Darbojoties ar cilpām, ir ļoti vienkārša un izplatīta kļūda, jo bash apstrādā citētos argumentus/virknes. Failu saraksta apskate jāveic šādi:

for file in one.c two.c

Ne šādi:

for file in 'one.c two.c'

Otrais piemērs ietver failu nosaukumus ar pēdiņām, kā rezultātā tiek izveidots saraksts ar tikai vienu parametru; cilpa for tiks izpildīta tikai vienu reizi. Šo problēmu var novērst, izmantojot mainīgo šādos gadījumos:

FILES='one.c two.c'
for file in $FILES
do
...
done

Ņemiet vērā, ka pašai mainīgās deklarācijas vērtībai ir jābūt iekļautai pēdiņās!

kā atrast tīmekļa vietnes tumšajā tīmeklī

Par bez saraksta

Tā kā nekas nav jāatkārto, for cilpa darbojas, neatkarīgi no komandrindas argumentiem, kas tika sniegti skriptam, kad tie tika izsaukti. Piemēram, ja jums ir skripts ar nosaukumu args.sh kas satur sekojošo:

#!/bin/sh
for a
do
echo $a
done

Pēc tam izpildot args.sh, tiks parādīts šāds:

$ ./args.sh one two three
one
two
three

Bašs atpazīst šo gadījumu un ārstē par darīšanu kā ekvivalents par $@ do kur $@ ir īpašs mainīgais, kas apzīmē komandrindas argumentus.

Tradicionālā skaitļa atdarināšana cilpai

Bash skripti bieži nodarbojas ar failu sarakstiem vai citu komandu izvades rindām, tāpēc for veida cilpa ir izplatīta. Tomēr tradicionālā c stila darbība joprojām tiek atbalstīta:

for (( i=1; i<=5; i++ ))
do
echo $i
done

Šī ir klasiskā forma ar trim daļām, kurās:

  1. mainīgais tiek inicializēts (i = 1), kad cilpa tiek pirmo reizi sastopama
  2. cilpa turpinās tik ilgi, kamēr nosacījums (i<=5) is true
  3. katru reizi ap ciklu mainīgais tiek palielināts (i ++)

Atkārtošana starp divām vērtībām ir pietiekami izplatīta prasība, lai būtu īsāka, nedaudz mazāk mulsinoša alternatīva:

for i in {1..5}
do
echo $i
done

Kronšteina paplašināšana, kas notiek, efektīvi pārveido cilpu iepriekš:

for i in 1 2 3 4

Smalkāka cilpas kontrole ar pārtraukumu un turpināšanu

Sarežģītākām cilpām bieži nepieciešams veids, kā agri iziet vai nekavējoties restartēt galveno cilpu ar nākamo vērtību. Lai to izdarītu, bash aizņemas pārtraukumu un turpina paziņojumus, kas ir izplatīti citās programmēšanas valodās. Šeit ir piemērs, kas izmanto abus, lai atrastu pirmo failu, kura garums pārsniedz 100 rakstzīmes:

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

For cilpa šeit darbojas visos failos pašreizējā direktorijā. Ja fails nav parasts fails (piemēram, ja tas ir katalogs), paziņojums turpināt tiek izmantots, lai atsāktu ciklu ar nākamo failu. Ja tas ir parasts fails, otrais nosacītais bloks noteiks, vai tas satur vairāk nekā 100 rakstzīmes. Ja tā, pārtraukuma paziņojums tiek izmantots, lai nekavējoties atstātu for ciklu (un sasniegtu skripta beigas).

Secinājums

Bash skripts ir fails, kurā ir izpildāmu instrukciju kopums. A for cilpa ļauj daļu skripta atkārtot daudzas reizes. Izmantojot mainīgos, ārējās komandas un pārtraukuma un turpināšanas paziņojumus, bash skripti var izmantot sarežģītāku loģiku un veikt plašu uzdevumu klāstu.

Kopīgot Kopīgot Čivināt E -pasts Vai ir vērts jaunināt uz Windows 11?

Windows ir pārveidots. Bet vai ar to pietiek, lai pārliecinātu jūs pāriet no Windows 10 uz Windows 11?

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Linux
Par autoru Bobijs Džeks(58 raksti publicēti)

Bobijs ir tehnoloģiju entuziasts, kurš gandrīz divus gadu desmitus strādāja par programmatūras izstrādātāju. Viņš aizraujas ar spēlēm, strādā par atsauksmju redaktoru žurnālā Switch Player un ir iedziļinājies visos tiešsaistes publicēšanas un tīmekļa izstrādes aspektos.

Vairāk no Bobija Džeka

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu