Za izlaz bash petlje. BASH: opis for, while, do petlje i primjeri upotrebe

A sada je došao red na petu temu ciklusa. U njemu ću nastaviti da razmatram kontrolne strukture bash shell-a. Prethodni post je pokrivao uslovne izjave. Sada je vrijeme za takve integralne jezičke strukture kao što su naredbe petlje. Petlje, kao i uslovi, su alati koji obezbeđuju kontrolu nad redosledom izvršavanja naredbi.
Bash podržava petlje za, while, while i select. Sada pogledajmo pobliže svaki od njih.

for naredba petlje

Opća sintaksa for izjave je:

za promenljivu
uradi
lista komandi
urađeno

Petlja for u bash-u se prilično razlikuje od petlje for u programskim jezicima kao što su C ili PHP. Dakle, ako ste C programer, moraćete da se naviknete na ove razlike kako se ne biste zbunili.
Kao rezultat zamjene šablona, ​​dobiva se lista riječi. Na svakoj iteraciji, varijabla preuzima svaku narednu vrijednost ove liste, a naredbe između do i done se izvršavaju. Iteracije se zaustavljaju kada su riječi na listi iscrpljene.
$ za dan u Pon Uto Sri Čet Pet ponovite „Danas $dan“ završeno
Rezervirane riječi for naredbe također se mogu napisati u jednom redu, kao što je to bilo u prethodnom postu za if naredbu. Da biste to učinili, stavite ";". Prepišimo prethodni primjer imajući na umu ovu značajku:
$ po danu u Pon Uto Sre Čet Pet; do echo "Danas je $dan"; urađeno
Odsustvo konstrukcije je ekvivalentno upisu [email protected] O parametru [email protected] rekao je u .

while naredba petlje

Opća sintaksa iskaza while je:

dok lista1
uradi
lista2
urađeno

List1 se prvo izvršava. Ako uspije, tj. vrati kod nula, kontrola prelazi na listu2. Iteracije se nastavljaju sve dok rezultat izvršavanja liste1 ne postane nula. Na primjer:
i=10 dok [ $i -gt 0 ]; do echo $i i=$(($i-1)) urađeno; odjek "kraj"

do naredbe petlje

Opća sintaksa izjave do je:

do liste1
uradi
lista2
urađeno

List1 se prvo izvršava. Ako ne uspije, odnosno s povratnim kodom koji nije nula, kontrola prelazi na listu2. Iteracije se nastavljaju sve dok rezultat izvršenja liste1 ne postane nula. Na primjer:
i=10 do [ $i -lt 0 ]; do echo $i i=$(($i-1)) urađeno; odjek "kraj"

izaberite naredbu petlje

Opća sintaksa naredbe select je:

izaberite varijablu
uradi
lista
urađeno

Kao rezultat zamjene šablona, ​​dobiva se lista riječi. Operator dodaje serijske brojeve ovim riječima i ispisuje cijeli skup u standardni tok grešaka. Odsustvo konstrukcije je ekvivalentno upisu [email protected] Nakon toga, prikazuje se prompt i red se čita iz standardnog ulaznog toka. Ako niz sadrži broj koji odgovara bilo kojoj riječi sa liste, tada varijabla dobija taj broj kao svoju vrijednost. Ako odgovarajuća riječ nije pronađena, tada vrijednost varijable postaje prazan niz. Nakon toga se izvršava lista naredbi, a iteracija se nastavlja sve dok se u ulaznoj liniji ne pronađe znak za kraj datoteke ili dok se u listi naredbi ne naiđe na prekid ili povratak.
Naredbe break i return se koriste za kontrolu napretka petlje. Komanda break prekida izvršavanje petlje, dok return vraća kod rezultata (nula ili različita od nule).
Naredba select korisna je za kreiranje numerisanih menija. Na primjer, u ~/temp direktoriju postoje 3 datoteke: proto.txt, file.txt i readme. Primjer fragmenta skripte koji vam omogućava da brzo pregledate bilo koji od njih.
echo "Odaberi datoteku za pregled:" odaberite datoteku u ~/temp/* Prekini; uradi ako [ -f $datoteka]; zatim cat $file; else break; fi done
Pokretanjem ove skripte, vidjet ćemo na ekranu:
Odaberite fajl za pregled:
1) /home/istergul/temp/file.txt
2) /home/istergul/temp/proto.txt
3) /home/istergul/temp/readme
4) Odustani

Sljedeća tema će se baviti zamjenama uvjetnih parametara. Radujem se vašim komentarima.

U ovom predavanju nastavljamo sa upoznavanjem bash. Želim da vas podsjetim da razmatramo te elemente bash da nam pomogne da razumemo skripte operativni sistem. Takvi elementi su svakako ciklusi i funkcije. Ako je neko studirao programiranje, onda neće biti poteškoća u razumijevanju ovih pitanja.

za petlju

Ciklus za V bash ima dva tipa. Razmotrite prvo klasičnu verziju za. Opšti pogled je sljedeći:

Između elemenata za I in postavljena je varijabla, koja zauzvrat uzima vrijednost iz niza vrijednosti datih između in I uradi. Između uradi I urađeno postoje naredbe koje se izvršavaju svaki put kada varijabla promijeni svoju vrijednost. Petlja se zaustavlja kada varijabla zauzme posljednju vrijednost u nizu. Vrijednosti u nizu su odvojene razmakom.

A evo i praktičnog primjera:

Redoslijed vrijednosti može se specificirati na različite načine. Eksplicitno - kao u gornjem primjeru, ili uz pomoć drugih varijabli, ili uz pomoć posebnih naredbi. Pogledajmo neke primjere. Budući da su vrijednosti odvojene razmakom, svaka varijabla koja sadrži niz s razmacima može se koristiti kao takve vrijednosti:

Rezultat će biti isti kao u prvom primjeru.

Ako trebate navesti niz brojeva, možete koristiti naredbu seq i mehanizam supstitucije. Tim seq vraća niz numeričkih vrijednosti na ekran. Sintaksa je jednostavna i bit će jasna iz primjera u nastavku:

rezultat:

Vratimo se drugoj vrsti. za. Često u skriptama možete pronaći takozvanu opciju poput C za, koji se koristi za petlje bazirane na brojevima. Pogledajmo primjer:

Petlja se izvršava dok je uslov koji se provjerava u izrazu istinit. Čim izraz vrati false, petlja se prekida.

Praktični primjer:

#!/bin/bash
i=1
dok [ $i -lt 7 ]
uradi
echo $i
neka je i=i+1
urađeno

U našem primjeru provjeravamo da li je varijabla i manje od (-lt), broj 7 i ako jeste, tada se prikazuje vrijednost varijable. Izraz neka je i=i+1, povećava varijablu za jedan, ponovo provjerava i tako dalje. let govori interpretatoru da argumente treba tretirati kao numeričke vrijednosti. Ovaj red bi se mogao napisati kao neka i++(varijanta poput c). Kada se broj poveća za više od jedan, može se napisati kao: neka je i+=2- u ovom slučaju iće se povećati u koracima od 2. Drugi način za povećanje varijable je korištenje ugrađenog kalkulatora (radi samo s cijelim brojevima). Kalkulatoru se može pristupiti kroz dvostruke zagrade: i=$(($i+1)) ili kroz kvadrat: i=$[$i+1] Možete koristiti i kalkulator na komandnoj liniji:

Kod petlji morate paziti da ne dobijete opciju beskonačne petlje. Usput za otklanjanje grešaka bash skripte, možete promijeniti prvi red u #!/bin/bash -x ili pokrenite skriptu pomoću naredbe bash-x:

[email protected]:~/linux$ bash -x ./testfor.sh
+ i=1
+ ‘[‘ 1 -gt 5 ‘]’
+ eho i=1
i=1
+ neka i=i+1
+ ‘[‘ 2 -gt 5 ‘]’
+ eho i=2
i=2
+ neka i=i+1
+ ‘[‘ 3 -gt 5 ‘]’
+ eho i=3
i=3
+ neka i=i+1
+ ‘[‘ 4 -gt 5 ‘]’
+ eho i=4
i=4
+ neka i=i+1
+ ‘[‘ 5 -gt 5 ‘]’
+ eho i=5
i=5
+ neka i=i+1
+ ‘[‘ 6 -gt 5 ‘]’

Obavezno vježbajte pisanje malih skripti kako biste učvrstili svoje razumijevanje kako petlje rade bash.

Funkcije u bash-u

Funkcije se primjenjuju u bash veoma široka. Funkcije se opisuju na dva načina: pomoću ključne riječi funkcija, i bez njega.

prvi način:

funkcija ime_funkcije
{
tijelo funkcije
}

drugi način:

ime_funkcije()
{
tijelo funkcije
}

Funkcija se poziva po imenu bilo gdje u skripti, ali samo nakon opisa same funkcije. Funkcijama se također mogu proslijediti parametri, koji su navedeni s razmakom nakon poziva (ime) funkcije. Razmotrite primjer skripte bash:

#!/bin/bash
funkcionalni prajmer
{
ako [ $# -ne 0 ]
onda
lokalno a=1
echo "Broj prođenih parametara - $#"
za ja in [email protected]
uradi
echo "$ a-ti parametar— $i"
neka a++
urađeno
vrati 0
ostalo
echo "Parametri nisu prošli"
povratak 1
fi
}
echo "Pozivanje funkcije s parametrima:"
prajmer a b c
echo $?
echo "Pozivanje funkcije bez parametara:"
prajmer
echo $?

IN ovaj primjer datoj funkciji pod nazivom prajmer. Pozivanje funkcije s parametrima: prajmer a b c i bez parametara: prajmer. U tijelu funkcije, svi konstrukti bi vam trebali biti poznati, s izuzetkom $# , $i I [email protected] .$# - vraća broj parametara proslijeđenih funkciji. U našem primjeru, ovo će biti broj 3 .[email protected] vraća sve parametre u jednom redu. U primjeru bi to bilo a b c. I kroz $1 , $2 , $3 itd. svakom parametru možete pristupiti pojedinačno. $? - sadrži izvršni kod posljednje naredbe. U našem primjeru, kod za izvršavanje funkcije.

Funkcija se također može vratiti numerička vrijednost preko ključne riječi povratak. Po pravilu vraćaju 0 ako je funkcija završena bez grešaka ili vrijednost različitu od nule ako je nešto pošlo po zlu. U primjeru, u slučaju poziva funkcije s parametrima, vraća se vrijednost 0, a ako je funkcija pozvana bez parametara, vraća se kod 1.

Sve oko prosljeđivanja parametara funkciji radi potpuno isto za skriptu. Također možete proslijediti parametre skripti i manipulirati njima na isti način koristeći $#, [email protected], $N. Iz iste kategorije i opcije - $0 - koji vraća ime komande koja je pokrenula skriptu. Ako je skripta pokrenuta na naredbu ./script.sh, zatim eho $0 će vratiti vrijednost ./script.sh, i ako na komandu /home/igor/linux/script.sh, tada će vrijednost biti vraćena /home/igor/linux/script.sh.

Jedno od osnovnih pravila sistemske administracije može se izraziti na sljedeći način: ako trebate često da radite istu stvar, napišite skriptu i pustite da radi posao umjesto vas. Ako trebate izvršiti neku radnju unutar skripte nekoliko puta, onda biste trebali koristiti ciklusa. IN GNU Bash možete kreirati petlje sa konstrukcijama za, dok I do.

Ako ste ikada bili zainteresovani za programiranje, velike su šanse da ste već upoznati sa ovim konstrukcijama. Ako, kao ja, učiš bash Ako nemate iskustva u programiranju iza sebe, upotreba petlji možda neće biti dovoljno očigledna za razumijevanje. Počnimo s definiranjem razlika između različitih tipova petlji, a zatim prijeđimo na primjere.

Ciklus za dizajniran je da ponavlja radnje dok se sve ne završe. Zamislite, na primjer, da imate direktorij slika i da ih trebate pretvoriti iz jednog formata u drugi. Možete koristiti petlju za zajedno sa programom pretvoriti iz paketa ImageMagick(ili neki drugi program), na primjer, za pretvaranje slika iz JPEG formata u PNG format. Ili, na primjer, možda ćete morati da konvertujete mnogo zvučnih datoteka iz MP3 V OGG Vorbis.

Ciklus dok koristi se za ponavljanje radnji ćao izvedeno (je istinito) neki uslov. Ciklus do radi malo drugačije: izvodi radnju do dok se ne ispuni uslov. Tako, na primjer, možete suprotstaviti i izvršiti akciju do dok njegova vrijednost ne dostigne 10. Pogledajmo ovo detaljnije na primjerima.

Počnimo s petljom za. Njegov format je:

Za i u $(komanda); izvrši naredbu $i; urađeno

Ako koristite petlju za u skripti, bolje ga je formatirati ovako:

#!/bin/bash za i u $(komanda); uradi naredbu $i done

Tako, na primjer, ako trebate rezervne kopije sve HTML datoteke u direktoriju, možete koristiti sljedeću naredbu:

Za i u $(ls *html); do cp $i $i.bak; urađeno

Ovo stvara lokalnu varijablu $i, naredba se izvršava ls*html, čiji će rezultati biti podaci koji inicijaliziraju vrijednost varijable $i pri svakoj iteraciji petlje (u našem primjeru, ovo će biti lista datoteka koje vraća naredba ls, po jedan za svaku iteraciju). Zatim se naredba izvršava k.č, kojem se promjenjiva prosljeđuje među parametrima $i.

Neko bi mogao pitati da li je obavezno koristiti pismo "ja" kao ime varijable? br. Možete koristiti bilo koji važeći bash ime varijable. Naravno, bolje je koristiti smislenija imena varijabli u skriptama, npr $input ili $html.

Dao sam vrlo kratak i jednostavan primjer korištenja petlje za. Umjesto naredbe koja se izvršava u bloku uradi,use echo kako bi vidjeli parametre koji su mu proslijeđeni. Ovo je vrlo korisna praksa u fazi testiranja skripti, kao i dobar način pomoći će vam da detaljnije shvatite svoj rad za.

dok i do

Razmotrite sada konstrukcije dok I do. Takođe ćemo koristiti bash kondicionale. U našem primjeru ćemo ih koristiti da odredimo, na primjer, da li je vrijednost varijable veća ili manja od broja X; da li datoteka postoji i da li je direktorij. Također možete koristiti uslovne da odredite, na primjer, da li je datoteka čitljiva ili ima GID bit u svojim dozvolama.

Pokušajmo napraviti nešto jednostavno, poput kreiranja praznih datoteka. U životu, malo je vjerovatno da će vam ovo biti od koristi, ali kao primjer, to je prava stvar.

#!/bin/bash i=0 dok [ $i -lt 22 ] dodirne $i i=$[$i+1] gotovo

Ova skripta će kreirati 22 fajla sa imenima od 0 do 21. Petlja će se izvoditi do ćao varijabilna vrijednost $i manje ( -lt) 22.

Sada se riješimo generiranih datoteka pomoću petlje do:

#!/bin/bash i=0 dok [ $i -eq 22 ] ne završi rm $i i=$[$i+1]

Ovdje smo zamijenili dok on do, i u uslovnom izrazu koji smo zamijenili "manje" (-lt) uključeno "jednako" (-eq). Dakle, naša skripta će raditi sve dok je vrijednost $i neće dostići 22. I umjesto dodir koristili smo rm da obrišete datoteke umjesto da ih kreirate. Jednostavno, zar ne?

Petlje su izuzetno zgodna stvar kada se piše bilo koji program ili skripta, odnosno neophodna. Oni nam omogućavaju da izvršimo neki dio koda određeni broj puta. Prirodno bash ima nekoliko vrsta petlji. Opisaćemo cikluse za, za, dok, dok. Iako se za in i za smatraju različitim sintaksama za istu izjavu, po mom mišljenju one se međusobno više razlikuju nego while od do.

Petlja sa brojačem za in:

Ciklus za in to je petlja sa brojačem. Blok koda koji se nalazi u tijelu petlje ponavlja se onoliko puta koliko ima vrijednosti na listi for in operatora, dok se pri svakom ponavljanju varijabla brojača (ovdje se zove var, ali naravno možete nazovite ga kako god želite) ima vrijednost sljedećeg elementa liste.
Ako je ključna riječ do u istom redu kao i riječ for, onda nakon liste argumenata (prije do) morate staviti tačku i zarez.
Svaki od elemenata<список>može sadržavati više argumenata. Ovo je korisno prilikom obrade grupa parametara. U ovom slučaju, za prisilno raščlanjivanje svakog od argumenata u<списке>, morate koristiti naredbu set
Možete koristiti varijablu kao listu u for petlji.
IN<списке>za petlje se mogu koristiti nazivi datoteka, koji zauzvrat mogu sadržavati zamjenske znakove. Ovo može biti vrlo korisno kada radite s velikim brojem datoteka.
Ako<список>nije navedena u for petlji, tada se varijabla koristi kao ona [email protected]- lista argumenata komandne linije.
Prilikom kreiranja liste argumenata, zamjena naredbi se može koristiti u for petlji.
Izlaz petlje se može preusmjeriti iz standardnog izlaza u datoteku ili negdje drugdje (možete saznati više o tome analizirajući I/O preusmjeravanje).

sintaksa:
za var in<список>
uradi
<выполняемые команды>
urađeno

primjer:
za imena u ime1 ime2 ime3 ime4
uradi
echo $names
urađeno

Naredba petlje za ima drugi način pisanja - vrlo sličan sintaksi operatora for u jeziku C. U ovom slučaju, prilikom inicijalizacije brojača, postavljaju se početne vrijednosti varijabli ili jedne varijable i nakon svakog prolaza petlja uvjet je provjeren, ako provjera vrati true, tada počinje sljedeći prolaz petlje. U bloku<приращение счётчиков>vrijednost naših promjenljivih brojača mora se nužno promijeniti (ne nužno naviše) tako da prilikom provjere uvjeta prije ili kasnije dobijemo vrijednost laži, inače se petlja nikada neće završiti. Vrlo zgodna i što je najvažnije poznata opcija, ako bilo koju operaciju treba ponoviti određeni broj puta.

Sa sličnom sintaksom:
za ((<инициализация счётчиков>; <проверка условия>; <приращение счётчиков>))
uradi
<выполняемые команды>
urađeno

primjer:
za ((var=1; var<= LIMIT ; var++))
uradi
echo $var
urađeno

while petlja:

Ovo je prilično jednostavna konstrukcija koja provjerava stanje iza operatera dok i ako je ovaj uslov tačan, on izvršava blok naredbi koji se nalazi između riječi do i done, a zatim ponovo nastavlja da provjerava uvjet. Ako provjera vrati false, tada se petlja završava i izvršavaju se sljedeće naredbe: urađeno. To je neophodno osigurati<проверка условия>zavisi od koda koji se izvodi u petlji inače, ako se rezultat provjere ne promijeni, dobit ćete beskonačnu petlju.
Standardni unos, za petlju while, može se preusmjeriti na datoteku pomoću naredbe za preusmjeravanje< в конце цикла.

sintaksa:
dok<Проверка условия>
uradi
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
urađeno

primjer:
dok [ $var0 -eq 100 ]
uradi
echo $var
var++
urađeno

Operater dok može imati više uslova. Ali samo posljednji od njih određuje mogućnost nastavka ciklusa. U ovom slučaju, sintaksa naredbe petlje će se razlikovati od uobičajene.
Sintaksa(Još jednom ponavljam da samo zadnji uslov utiče na izvršenje petlje) :
dok
<условие1>
<условие2>

<условиеN>
uradi
<выполняемые команды - тело цикла>
urađeno

do petlje:

Operater do vrlo slično while, također procjenjuje uvjet, ali izvršava tijelo petlje ako je rezultat izračunavanja lažan. Možda izgleda čudno, ali do procjenjuje stanje prije prve iteracije petlje, kao while, a ne nakon nje. Kao i kod for/in petlje, kada stavite ključnu riječ do u isti red kao i deklaracija petlje, morate umetnuti znak ";" prije nego uradi.
Kao iu prethodnom slučaju, važno je zapamtiti da uslov mora zavisiti od operacija u telu petlje, inače se naša skripta nikada neće završiti.

sintaksa:
do<Проверка условия>
uradi
<Блок команд, обязательно меняющий переменные влияющие на проверку условия>
urađeno

primjer:
do [ $var0 -gt 100] # Uslov se provjerava na početku iteracije.
uradi
echo $var
var--
urađeno

Verovatno dovoljno za sada. :)

  • Nazad
  • Naprijed

Novi članci:

  • Otkrivanje mreže se ne uključuje u Windows 7/8/2008/2012
  • Greška: Ova aplikacija nije uspjela da se pokrene jer nije mogla pronaći ili učitati dodatak Qt platforme "windows".
  • Konfigurisanje automatskog ponovnog pokretanja radnih procesa servera rphost.exe 1C 8.3
  • Kako smanjiti veličinu dnevnika transakcija (.ldf) u MS SQL 2008/20012

    MS SQL, kao i svaki pristojan industrijski DBMS, zajedno sa bazom podataka, čuva dnevnike transakcija koji vam omogućavaju da vratite stanje...

5

Vaša skripta je kodirana na opasan način.

Prvo, pretpostavljam da koristite Bash shell pošto ste je označili sa "/bash" i "/for".

U svom odgovoru citirat ću ovaj sjajni vodič za Bash, koji je vjerovatno najbolji izvor za učenje Bash-a.

1) Nikada nemojte koristiti Command Substitution , out ili ljubazno, bez navodnika. Ovdje postoji veliki problem: korištenje proširenja bez citata za podjelu izlaza u argumente.

Da budemo precizni, ovaj $(find$ DIRWORK -type d -name rad) i $(find$ DIR -type f) će se podvrgnuti razdvajanju riječi, tako da ako find pronađe datoteku s razmacima u nazivu, tj. riječ "filename" razdvaja rezultat Bash-a će prenijeti 2 argumenta for komandi za ponavljanje, tj. jedan za "file" i jedan za "name". U ovom slučaju, želite se nadati da ćete dobiti "datoteka: nema takve datoteke ili direktorija" i "ime: nema takve datoteke ili direktorija" umjesto da ih potencijalno oštetite ako postoje.

2) Po konvenciji, varijable okruženja (PATH, EDITOR, SHELL, ...) i interne varijable ljuske (BASH_VERSION, RANDOM, ...) su u potpunosti napisane velikim slovima. Sva ostala imena varijabli moraju biti mala slova. Budući da su imena varijabli osjetljiva na velika i mala slova, ova konvencija izbjegava slučajno redefiniranje okolišnih i internih varijabli.

Ovo je sigurnija verzija vaše skripte koju preporučujem da umjesto nje koristite:

My_home="/root/mydir" my_dir=" $my_home/var" dir_work="$ my_home/Local" dok IFS= čita -r -d "" f; uradi # Pretpostavljam da i vi želite da ignorišete stderr; # ovo je odakle dolazi 2>&1. if lsof -n "$f" | grep "" > /dev/null 2> onda echo "hej , "Sada sam sigurniji!" fi done< <(find "$ dir_work" -type f -print0) while IFS= read -r -d "" f; do echo "2" done < <(find "$dir_work" -type d -name "work" -print0)

Kao što možete vidjeti, varijabla IFS je postavljena na praznu, čime se sprječava čitanje da odsiječe početne i zadnje razmake iz niza. naredba read koristi prazan niz (-d "") kao graničnik za čitanje dok ne dostigne \ 0. find mora biti m respektivno, tako da koristi opciju -print0 da razgraniči svoje podatke sa \ 0 umjesto novim redom, što je, iznenađujuće i zlonamjerno, može biti dio naziva datoteke. Podjelom takve datoteke na \n na dva dijela razbiti će se naš kod.

Prethodni odgovor, u kojem se navodi da se nalazi ... | while readname; do ...; done treba koristiti za čitanje find s izlaz može biti loš. Dok petlja se izvršava u novoj podljusci sa svojom kopijom varijabli kopiranom iz nadređenog. Ova kopija se onda koristi za šta god želite. Kada se while petlja završi, kopija podljuske će biti odbačena i originalne varijable roditelja neće biti promijenjene.

Ako namjeravate promijeniti neke varijable unutar ove while petlje i koristiti ih kasnije u nadređenoj, razmislite o korištenju sigurnije skripte koja će spriječiti gubitak podataka.

0

"Nikada nemojte koristiti zamjenu naredbi, bilo koje vrste, bez navodnika." To je samo prigovaranje, ali moguće je koristiti zamjenu naredbi bez navodnika kada postavite varijablu: "nešto = $(basename" ime datoteke sa razmacima ")". - Smith John 22 apr. 13 2013-04-22 21:43:10

2

Za i u $(pronađi$ DIRWORK -tip d -ime rad); do echo "2" urađeno

će biti prvi koji će izvršiti ovu liniju

Pronađite posao $DIRWORK -type d -name

sačekajte dok find završi sa izvršavanjem, a zatim uzmite izlaz i vratite ga u for petlju

Za i u izlazu find; do echo "2" urađeno

tek tada će petlja for početi da se izvršava.

Dakle, ako find traje dugo da završi for petlju, mora dugo čekati prije nego što počne.

Pokušajte interaktivno sa privremenim komandama find

$vrijeme nađi $DIRWORK -tip d -ime posao

i vidi koliko će to trajati.

Također imajte na umu da ne biste trebali koristiti for petlju za ponavljanje imena datoteka. Koristite while petlju sa read , ovako:

Pronađi$ DIRWORK -tip d -ime rad | while readname; do echo "2" urađeno

Bonus: izvršava while petlju paralelno sa find . To znači da će while petlja izvršiti jednu iteraciju čim find ispiše jedan red. Ne morate čekati da find završi izvršenje.

mob_info