30 Bash hurok példák

három típusú hurkot használnak a bash-ban különböző célokra. Ezek a, Amíg és amíg hurkok. Ezeknek a hurkoknak a különböző felhasználási módjait a cikk 30 különböző példájával magyarázzuk.

a Bash hurkok használata:

  1. a hurok használata a lista elemeinek olvasásához
  2. a hurok használata tömb olvasásához
  3. a hurok használata a karakterláncok listájának olvasásához, szóközökkel
  4. a hurok használata {START..Vége..Növekmény} tartomány
  5. a hurok használata {START..Vége..INCREMENT} tartomány visszalépés
  6. 3 részből álló hurok használata és feltételszámláló
  7. 3 részből álló hurok használata és több feltétel és művelet vesszővel
  8. végtelen hurok használata
  9. feltételes megszakítással és folytatással rendelkező hurok használata
  10. hurok használata fájlnevek olvasásához globbing segítségével
  11. hurok használata a
  12. find parancs kimenetének olvasása a for hurok használata egy könyvtár fájlneveinek rekurzív olvasásához
  13. a For hurok használata egy könyvtár fájlneveinek rekurzív olvasásához, a
  14. feltétellel a hurok futtatása a fájl létezik
  15. a For loop használata a Csomaglista kimenete alapján parancs
  16. a For loop használata a fájl minden sorának olvasásához
  17. a For loop használata a fájl minden sorának olvasásához feltételes egyezés alapján
  18. A While loop használata számlálóval
  19. a While loop használata felhasználói bemenettel és kilépés a menüből való kilépés kiválasztásakor
  20. míg a hurkok kombinálása a getopts-szal
  21. amíg a hurok használata számlálóval
  22. a felhasználói bevitel alapján zárja le az amíg a hurok
  23. beágyazott, míg a hurkok
  24. amíg a hurok használata aludni/várni a Háttérfeladatra kezdődött a script
  25. használata while loop olvasni pid PS kimenet, amely nem fejeződött be
  26. Keresés bármely húr egy fájlt a hurok és kilépés
  27. kombinálása bash és curl, hogy értékelje az adatokat URL
  28. adatok olvasása egy port által küldött netcat használata közben hurok
  29. ping URL használata hurok
  30. futás

a for hurok használata a lista elemeinek olvasásához

a ‘for’ hurok legegyszerűbb használata a karakterláncok vagy numerikus adatok listájának olvasása. A numerikus adatok listáját a következő példában a for-in hurok segítségével iteráljuk. Itt négy szám lesz olvasható a változóban, $n a ciklus minden lépésében és kinyomtatva. Hozzon létre egy bash fájlt a következő parancsfájllal, majd futtassa a terminálról.

#!/ bin / bash
# for-in hurok a számok listájának olvasásához
n számára 10-ben 11 17 25
do
# minden szám nyomtatása
echo “a szám $n”
done

kimenet:

futtassa a szkriptet.

$ bash for1.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a For loop használata tömb olvasásához

bármely tömb változó tartalmaz egy listát azokról az adatokról, amelyek nagyon könnyen iterálhatók a for-in hurok használatával. A következő példa a for-in ciklus használatát mutatja be a karakterlánc-adatok tömbjének olvasására. Itt minden tömb értéke a $language változóba kerül, és minden egyes iterációban a nyelv alapján kinyomtat egy üzenetet.

#!/bin/bash
languages=(“Bash PERL Python PHP”)
a $nyelvek nyelvéhez
do
ha
akkor
echo “a$nyelv egy webes programozási nyelv”
else
echo “a$nyelv egy szkriptnyelv”
fi
kész

kimenet:

futtassa a szkriptet.

$ bash for2.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a For ciklus használatával olvassa el a

szóközökkel rendelkező karakterlánc-értékek listáját, ha egy karakterlánc listáját a for-in ciklus olvassa, és Bármely karakterlánc-érték szóközt tartalmaz, akkor az értékek szóköz alapján oszlanak meg, ha a karakterlánc értékét nem idézik egyetlen vagy kettős idézettel. A következő példa azt mutatja be, hogy a szóközökkel rendelkező karakterlánc-értékek listája hogyan olvasható a for-in hurokban. Itt a lista egyik értéke szóközt tartalmaz, amelyet a kimenetben lévő szóközzel nyomtatnak ki.

#!/bin / bash
# for-in loop olvasni listája húrok helyet
os “Ubuntu” “Linux Mint” “Fedora” “CentOS”
do
#Print minden string
echo “operációs rendszer – $os”
kész

kimenet:

futtassa a szkriptet.

$ bash for3.sh

itt a ‘Linux Mint’ karakterlánc értéke megfelelően van nyomtatva.

ugrás a tetejére

a hurok használata {START..Vége..INCREMENT} tartomány

A for-in hurok másik használata a tartomány tömb olvasása. A következő példában a for hurok 10-től 30-ig terjedő adattartomány olvasására szolgál, amelyet minden lépésben 5-tel növelünk. Ezután a szkript kinyomtatja azokat a számokat a tartományban, amelyek oszthatók 10-gyel.

#!/ bin / bash
# olvassa el a tartományt a hurok
for num in {10..30..5}
do
# ellenőrizze, hogy a szám osztható-e 10-vel vagy sem
ha (($num%10==0 ))
ezután
echo “$num osztható 10”
fi
kész

kimenet:

futtassa a szkriptet.

$ bash for4.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a hurok használata {START..Vége..INCREMENT} tartomány visszalépés

az Adattartomány visszafelé olvasható a for-in hurok használatával, ahol a tartomány kezdő értéke nagyobb, mint a tartomány végértéke. A következő példában a tartomány 50-től kezdődik és 30-ig ér véget. A $num értéke 10-gyel csökken a ciklus minden lépésében. A szkript kiírja azokat a számokat a tartományból, amelyek oszthatók 5-tel és 10-gyel.

#!/bin / bash
echo “a következő számok oszthatók 5-tel és 10-gyel”
# olvass egy tartományt a For loop
for num in {50..30..10}
do
# ellenőrizze, hogy a szám osztható-E 5-tel és 10-vel, vagy sem
if (($num%5==0 && $szám%10==0 ))
akkor
echo-n “$num “
fi
kész
echo “Kész”

kimenet:

futtassa a szkriptet.

$ bash for5.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

Ugrás az elejére

használata hurok 3 részből és feltétel számláló

Bash támogatja hurok három részből áll, mint a többi szabványos programozási nyelvek. Az első rész az inicializálást, a második rész a befejezési feltételt, a harmadik rész pedig a növekmény vagy csökkentés műveletet tartalmazza. Ezt a hurkot főleg akkor használják, ha az iteráció számát korábban meghatározták. A következő példában a For hurok 50-szer ismétlődik, és kiszámítja az 1-től 50-ig terjedő összeget. Az összegzés eredménye kimenetként jelenik meg.

#!/bin/bash
# inicializálja a változót
sum=0
# a hurok 50-szer ismétlődik
for (( n=1; n<=50; n++ ))
do
# adja hozzá az összegértéket a következő értékhez n
((sum=$sum+$n))
kész
# nyomtassa ki az eredményt
Echo “az 1-től 50-ig terjedő összeg $összeg”

kimenet:

futtassa a szkriptet.

$ bash for6.sh

az 1-től 50-ig terjedő összeg látható a kimeneten.

ugrás a tetejére

a 3 részből álló hurok és a több feltétel és a vesszővel rendelkező műveletek használata

a három részből álló hurok több inicializálással, befejezési feltételekkel és műveletekkel definiálható. A következő példa bemutatja az ilyen típusú hurok használatát. Itt a $x és $y változókat 5-tel és 25-tel inicializáljuk. A ciklus addig folytatódik, amíg a $x értéke kisebb vagy egyenlő 20-nál, és a $y értéke nagyobb, mint 5. A $x értéke 5-tel növekszik, a $ y értéke pedig 5-tel csökken a ciklus minden iterációjában. Az egyes lépésekben az aktuális $x és $y érték jelenik meg kimenetként.

#!/ bin / bash
# a hurok két feltétel alapján ismétlődik
mert ((x=5, y=25; x<=20 && y>5; x + =5, y-=5))
do
echo “az aktuális érték x=$x és y=$y”
done

kimenet:

futtassa a szkriptet.

$ bash for7.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

végtelen használata a hurokhoz

ha bármelyik hurok bármilyen végződési feltétel nélkül van meghatározva, akkor a hurok végtelen hurokként működik. A következő példa az infinite for loop használatát mutatja be, amely nem tartalmaz inicializálási, lezárási és műveleti részeket. Ezt a típusú for ciklust dupla pontosvessző (;;) határozza meg. A következő parancsfájl addig folytatja a ciklust, amíg a felhasználó be nem írja a ‘quit’ parancsot bemenetként. A szkript bármilyen számot kinyomtat 1 nak nek 20 amely bemenetként fog megjelenni, különben kinyomtatja: “a szám tartományon kívül esik”

#!/ bin / bash
# végtelen ciklus deklarálása
for (( ; ; ))
do
# vegyen be egy bemenetet
echo “adjon meg egy számot 1-től 20-ig”
olvassa el n
# állítsa be a hurok befejezési feltételeit
ha
akkor
echo “a Program befejeződött”
kilépés 0
fi
# ellenőrizze a számtartományt
ha (( $n < 1 || $n > 20 ))
akkor
Echo “a szám kívül esik”
else
echo “a szám $n”
Fi
kész

kimenet:

futtassa a szkriptet.

$ bash for8.sh

itt a 6 az első bemenet, amely érvényes szám, a 22 a második bemenet, amely érvénytelen szám, a quit pedig a harmadik bemenet, amely megszüntette a szkriptet.

ugrás a tetejére

feltételes megszakítással és folytatással rendelkező hurok használata

a’continue’ utasítás arra szolgál, hogy kihagyja a hurok egyes részeit bármely feltétel alapján, a ‘break’ utasítás pedig a hurok bármely feltétel alapján történő befejezésére szolgál. A következő példa bemutatja ezeknek az utasításoknak a használatát a for ciklusban. Itt a hurok a karakterláncadatok listájának olvasására szolgál, és a lista minden értékét a $food változó tárolja. Ha a $ food értéke ‘Soup’, akkor az érték kinyomtatása nélkül folytatja a ciklust. Ha a $ food értéke ‘Pasta’, akkor véget vet a huroknak. Ha a $ food a ‘Soup’ és a ‘Pasta’ értékeken kívül más értéket is tartalmaz, akkor kiírja az értéket. Tehát a szkript két értéket nyomtat ki a listából kimenetként.

#!/bin/bash
# deklarálja a hurok egy listát
az élelmiszer Pizza leves Burger tészta tészta
do
# Set feltétele továbbra
ha
akkor
továbbra
# Set feltétele szünet
elif
akkor
szünet
else
echo “$élelmiszer a kedvencem”
fi
Kész

kimenet:

futtassa a szkriptet.

$ bash for9.sh

itt két érték hiányzik a listából. A ‘ leves ‘nincs nyomtatva a continue utasításhoz, a’ tészta ‘ pedig a break utasításhoz.

Menj Felső

A for ciklus olvasni fájlnevek által globbing

Fájlnevek, vagy az adott tartalmat a fájl lehet keresni segítségével globbing. Használ különböző típusú helyettesítő karakterek a megfelelő bármilyen fájlnevet vagy a keresett tartalmat a fájl. Minden fájl a txt kiterjesztést a jelenlegi helyen van a keresett nyomtatott, amelyet a következő példa. Amikor az futni fog a forgatókönyvet, akkor az összes megfelelő fájlnevek kinyomtatja anélkül, újsor, mint kimenetet.

#!a / bin / bash
# Loop megkeresi az összes szöveges fájlt, és az egyes fájlneveket a $file
fájlban tárolja a “*.txt”;
do
# nyomtassa ki a fájlnevet
echo $fájl;
kész

kimenet:

futtassa a szkriptet.

$ bash for110.sh

ugrás a tetejére

a For loop használata a find parancs kimenetének olvasásához

a’find’ parancsot különböző célokra használják a bash-ban. A következő példában a ‘find’ parancs az összes szöveges fájlnév olvasására szolgál az aktuális helyről. Itt a’ – name ‘ opció használható kis-és nagybetűérzékeny kereséshez. Tehát a szkript kinyomtatja az aktuális hely fájlneveit, amelyek a ‘.txt ‘ kiterjesztés bármilyen névvel. Itt az IFS változó határozza meg az új sort mezőelválasztóként, és minden sorban kiírja a $file értékét.

#!/bin / bash
# mezőelválasztó beállítása
IFS=$’\n’;
# egy
könyvtár fájljainak olvasása $- ban(find-name “*.txt”); do
echo $file
done
# Uunset mezőelválasztó
állítsa le az IFS-t;

kimenet:

futtassa a szkriptet.

$ bash for11.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a For loop használata egy könyvtár fájlneveinek rekurzív olvasásához a

‘find’ parancs használható egy adott könyvtár összes fájljának és almappájának olvasására. A következő példa a ‘find’ parancs használatát mutatja be az összes fájlnév és könyvtár olvasásához a ‘mydir’ könyvtárban. Itt az IFS változó a $filename értékét ‘newline’ – val nyomtatja ki, mint az előző példában.

#!/ bin / bash
# mezőelválasztó beállítása
IFS=$’ \ n’;
# olvassa el a könyvtár fájljait
a fájlnévhez $ – ban(keresse meg a “mydir” – t)
do
echo “$fájlnév ”
kész
# mezőelválasztó törlése
IFS-beállítás törlése;

kimenet:

futtassa a szkriptet.

$ bash for12.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a For loop használata egy könyvtár fájlneveinek rekurzív olvasásához a

‘for’ loop with ‘find’ paranccsal használható a Som+

e könyvtár bizonyos fájlneveinek nyomtatására bármilyen feltétel alapján. a ‘find’ parancsot a következő példában szereplő feltétellel használjuk. Csak a mydir könyvtár szöveges fájlneveit fogja keresni. Itt a’ – iname ‘opciót használjuk a ‘find’ paranccsal az incensive case kereséshez. Ez azt jelenti, hogy minden ‘txt’ vagy ‘TXT’ kiterjesztésű fájl párosul, és kimenetként kinyomtatásra kerül. Itt az IFS változó a $filename értékét ‘newline’ – val nyomtatja ki, mint az előző példában.

#!/bin / bash
# mezőelválasztó beállítása
IFS=$’\n’;
# olvassa el a
könyvtár összes szöveges fájlját a fájlnévhez $- ban(keresse meg a mydir-iname ‘* – t.txt’); do
echo “$fájlnév ”
done
# mezőelválasztó kikapcsolása
IFS kikapcsolása;

kimenet:

futtassa a következő parancsot a mydir könyvtár fájljainak és mappáinak listájának megjelenítéséhez.

$ ls mydir

futtassa a szkriptet.

$ bash for13.sh

a könyvtárban három szövegfájl található, amelyek a kimeneten jelennek meg.

ugrás a tetejére

a ciklus futtatása a fájl létezéséig

bármilyen fájlnév létezik vagy sem, a következő példában az infinite for loop használatával ellenőrizhető. Ebben a szkriptben egy fájlnév lesz bemenet a hurok minden iterációjában, és megvizsgálja, hogy a fájlnév létezik-e az aktuális helyen, vagy sem. Ha a fájlnév létezik, akkor a szkript kinyomtatja a “fájl létezik” parancsot, és folytatja a ciklust, különben a “fájl nem létezik” üzenet kinyomtatásával befejezi a ciklust.

#!/bin/bash
# Define infinite loop
for(( ; ; ))
do
# adjon meg egy fájlnevet
echo “adjon meg egy fájlnevet”
olvassa el a fájlt
# ellenőrizze, hogy a fájl létezik-e vagy sem
ha
akkor
echo “a fájlnév nem létezik”
kilépés 0
else
Echo “fájl létezik”
fi
kész

kimenet:

futtassa a szkriptet.

$ bash loop14.sh

első bemenetként egy meglévő fájlnév, második kimenetként pedig egy nem létező fájlnév jelenik meg, amely befejezte a szkriptet.

ugrás a tetejére

a For loop használata a Csomaglista parancs kimenete alapján

a rendszerben telepített csomagokra vonatkozó információk az `apt list – -installed`paranccsal érhetők el. a ‘ for ‘ hurok a következő példában a telepített csomaginformációk beolvasására szolgál a Csomaglista parancsból, és az egyes csomaginformációkat minden sorba nyomtatja. Az IFS változót itt használjuk a $sor értékének ‘newline’ – val történő nyomtatására, mint az előző példában.

# mezőelválasztó beállítása
IFS=$ ‘\n’;
# fájl olvasása soronként
soronként $(apt lista-telepítve)
do
echo “$sor ”
kész
# mezőelválasztó kikapcsolása
IFS beállítás feloldása;

kimenet:

futtassa a szkriptet.

$ bash for15.sh

a kimenet a telepített csomagok listáját mutatja.

ugrás a tetejére

a For loop használata egy fájl sorainak olvasásához

a fájl Bash-ban történő olvasásának számos módja van. a ‘ cat ‘ parancsot a következő példában használjuk a fájl olvasásához, temp.txt. A fájl minden sora a $line változóban tárolódik, és a For ciklus minden iterációjában kinyomtatja a sort. Az IFS változót itt használjuk a $sor értékének ‘newline’ – val történő nyomtatására, mint az előző példában.

#!/bin / bash
# mezőelválasztó beállítása
IFS=$’\n’;
# fájl olvasása soronként
soronként $ – ban(cat temp.txt)
do
echo “$line ”
done
# mezőelválasztó kikapcsolása
IFS kikapcsolása;

kimenet:

futtassa a szkriptet.

$ bash for16.sh

ugrás a tetejére

a For loop használata a fájl feltételes egyezésű sorainak olvasásához

ha csak egy fájlból szeretne bizonyos sorokat kinyomtatni, akkor hozzá kell adnia a fájl olvasásához használt hurokba. A következő példa kiírja a ‘hétköznap minden sorának formázott kimenetét.TXT ‘ fájl egy feltétel alapján. Ha a fájl bármely sora tartalmazza a ‘Sunday’ értéket, akkor a ‘holiday’ üzenetet fogja kinyomtatni, különben a ‘working day’ üzenetet fogja kinyomtatni.

# olvassa el a fájlt
a sorban $(cat hétköznap.txt)
do
#hasonlítsa össze az értéket egy karakterlánc adatával
ha
akkor
echo”$sor ünnep “
else
echo”$sor munkanap ”
fi
kész

kimenet:

futtassa a szkriptet.

$ bash for17.sh

a parancsfájl futtatása után a következő kimenet jelenik meg.

ugrás a tetejére

a while hurok használata számlálóval

$counter változó bármilyen hurkot használ a hurok iterációjának vezérlésére. A következő példa a while hurok használatát mutatja a számlálóval. Itt a $counter 1-re van inicializálva, míg a While loop 5-ször ismétlődik, és minden iterációban kiírja a $counter értékét. a $counter minden lépésben 1-gyel növekszik, hogy elérje a ciklus befejezési állapotát.

#!/ bin / bash
# inicializálja a számlálót
counter=1
# ismételje meg a hurkot 5 alkalommal
míg
do
echo “Counter value = $counter”
((counter++))
kész

kimenet:

futtassa a szkriptet.

$ bash loop18.sh

ugrás a tetejére

a while loop használata felhasználói bevitellel, majd kilépés a menüből való kilépés kiválasztásakor

‘while’ hurok a következő példában 5 opcióból álló menü megjelenítésére szolgál. Az első négy opció négy aritmetikai művelet végrehajtására szolgál a felhasználó bemenete alapján, az utolsó opció pedig a szkriptből való kilépésre szolgál. A menü akkor jelenik meg, ha két számot ad meg bemenetként. Ha a felhasználó az ‘1’ – et választja, akkor a bemeneti számok hozzáadódnak. Ha a felhasználó ‘2’ – t választ, akkor a második bemeneti szám levonásra kerül az első bemeneti számból. Ha a felhasználó a ‘3’ – at választja, akkor a bemeneti számok megszorozódnak, ha pedig a ‘4’ – et választja, akkor az első bemeneti számot elosztják a második bemeneti számmal.

#!/bin / bash
# vegyünk két számot
echo “adjon meg egy számot”
olvassa el az n1
echo “írjon be egy számot”
olvassa el az n2
# végtelen hurok deklarálása
míg igaz
do
# a menü megjelenítése
echo “1. Kiegészítés “
echo ” 2. Kivonás “
echo ” 3. Szorzás ”
visszhang “4. Osztály “
echo ” 5. Kilépés “
echo-n ” válasszon tetszőleges számot :”
read input
# végezze el a műveletet a kiválasztott érték alapján
ha ]
akkor
((eredmény=n1+n2))
elif ]
akkor
((eredmény=n1-n2))
elif ]
akkor
((eredmény=$n1*$n2)) 8722>Elif]
majd
((eredmény=$n1/$n2))
Elif]
akkor
kilépés 0
else
Echo “érvénytelen bemenet”
Fi
Echo “az eredmény $eredmény”
kész

kimenet:

futtassa a szkriptet.

$ bash loop19.sh

a következő kimenet jelenik meg a 2.és 5. opció kiválasztása után.

ugrás a tetejére

a

‘getopts’ hurkok kombinálása a getopts egy beépített funkciója a bash-nak, amely a Bash szkript argumentumainak és opcióinak olvasására szolgál. A következő példa a getopts függvény használatát mutatja be, amelyet egy while ciklusban használnak. Itt három opcióértéket használnak a getopts-szal. Ezek ‘a’, ‘r’és ‘ c’. Három különböző üzenet kerül nyomtatásra ezekhez az opciókhoz.

#!/bin / bash
# olvassa el az opciót, és tárolja egy változóban
míg a getopts ” arc ” opció; do
# ellenőrizze az opció értékét
case ${option} a
a) # A opció
echo “a folyamat megszakadt”
;;
r) # R opció
echo “a folyamat újraindul”
;;
c) # c opció
echo “a folyamat folytatódik”
;;
\? ) # invalid option
echo “Use: or or “
;;
esac
done

kimenet:

futtassa a szkriptet érvényes opciókkal.

$ bash loop20.sh -arc

futtassa a szkriptet érvénytelen opcióval.

$ bash loop20.sh-h

ugrás a tetejére

A amíg hurok számlálóval

amíg a hurok használható olyan számlálóval, mint a while hurok, amely korábban látható. A következő példa az until hurok használatát mutatja számlálóval. Itt a $counter változó az 1-re inicializált hurok iterációjának vezérlésére szolgál. Az until ciklus addig folytatódik, amíg a $counter értéke 5-re nem csökken. Tehát a ciklus 6-szor ismétlődik, és minden lépésben kinyomtatja a $counter értéket. a $counter minden lépésben 1-gyel csökken, hogy elérje a ciklus befejezési állapotát.

#!/bin/bash
# inicializálja a számlálót
számláló=10
# ismételje meg a hurkot 6 alkalommal
amíg
nem
echo “a számláló = $számláló aktuális értéke”
((számláló–))
kész

kimenet:

futtassa a szkriptet.

$ bash loop21.sh

ugrás a tetejére

a felhasználói bevitelen alapuló ciklus befejezése

bármely hurok egy adott feltétel alapján megszűnik. A következő példában látható, hogy a felhasználói bevitel alapján hogyan lehet megszakítani a until loop-ot. A felmondási feltétel szerint a hurok akkor szűnik meg, ha a $szám értéke nagyobb, mint 50. A $szám értéke nem növekszik a cikluson belül. Szóval., a hurok addig folytatja a felhasználó bevitelét, amíg 50-nél több számot nem veszünk bemenetként.

#!/ bin / bash
# szám inicializálása
szám=0
# a numerikus adatok mintájának beállítása
minta=’^+$’
# állítsa be a felmondási feltételt
amíg
do
echo-n “adjon meg egy számot:”
olvassa el a számot
# ellenőrizze, hogy a bemeneti érték szám-e vagy sem
ha ! ]
majd
echo ” hiba: Nem egy szám ”
number=0
else
echo “$számot adott meg”
fi
kész

kimenet:

futtassa a szkriptet.

$ bash loop22.sh

a parancsfájl ismét megismétli a 4 bemeneti érték ciklusát, megjeleníti a bemeneti érték hibaüzenetét, gg, és befejezi az 54 bemeneti érték ciklusát.

ugrás a tetejére

beágyazott while hurkok használata

ha egy hurkot egy másik hurokban deklarálnak, akkor azt végtelen huroknak nevezzük. A következő példa a beágyazott while ciklus használatát mutatja be. Itt az első while hurok 2-szer, a második while hurok az első hurokban háromszor ismétlődik. A hurkok teljes iterációja 2 db 3=6-szor. a $i és a $ j változók ezen ciklusok iterációjának vezérlésére szolgálnak, és ezeknek a változóknak az értékei minden lépésben kimenetként kerülnek kinyomtatásra.

#!/bin/bash
# I és j inicializálása
i=1
j=1
# az I
végfeltételének beállítása
míg
Végfeltétel beállítása j
míg
do
# az I és j aktuális értékének kinyomtatása
printf “i=%d, j=%d\n” $i $j
((j++))
kész
j=1
((i++))
kész

kimenet:

futtassa a szkriptet.

$ bash loop23.sh

ugrás a tetejére

az until loop to sleep/wait for background feladat parancsfájlban történő indítása

bármely folyamat futtatható a háttérben a ‘&’ szimbólum használatával. Ebben a példában látható, hogy egy folyamat hogyan futtatható a háttérben az until loop használatával és a ciklus befejezésével a sleep parancsban megadott idő alapján. Itt a $ cnt változót használják a hurok megszüntetésére. A hurok elindítja a háttérfolyamatot, és a kimenetet egy “output” nevű szöveges fájlba írja.txt ” 1 másodpercig. Ezt követően a ciklus lezárási állapota ellenőrizni fogja, és hamis lesz. Ezután a szkript kinyomtat egy “alvó …” üzenetet, majd 3 másodperc múlva kilép a szkriptből.

#!/bin / bash
# inicializálja a számlálót
cnt=1
# állítsa be a lezárási feltételt
amíg
csinál
echo “a háttérfolyamat fut”;
# várjon 1 másodpercet
alvás 1;
((cnt++))
kész > kimenet.txt &
# várjon 3 másodpercet
echo “alszik…”
alvás 3

kimenet:

futtassa a szkriptet.

$ bash loop24.sh

ellenőrizze a szkript kimenetét.

$ macska kimenet.txt

ugrás a tetejére

a while loop használata a PID olvasásához a PS kimenetről, amely nem fejeződött be

a’ps’ parancs a rendszer összes futó folyamatáról információt kap. Részletes információkat nyújt minden futó folyamatról, például felhasználói azonosítóról, PID-ről, cpu-használatról, memóriahasználatról stb. A következő példa bemutatja, hogy egy while ciklus hogyan használható az ‘apache’ – hoz kapcsolódó futó folyamat információk olvasására. Itt az IFS változó az egyes folyamatok PID-jének újsorral történő nyomtatására szolgál. Ezután megvárja, amíg a felhasználó megnyomja bármelyik gombot a szkriptből való kilépéshez.

#!/bin | bash
# mezőelválasztó beállítása
IFS=’ ‘
míg
do
# az apache összes futó folyamatazonosítójának lekérése
pid=`ps-ef | grep “apache” / awk ‘{print $2 ” folyamat fut …”} “
echo $pid
# várjon 1 másodpercet
alvás 1
# nyomja meg bármelyik gombot a hurok befejezéséhez
echo “nyomja meg bármelyik gombot a megszüntetéshez”
ha read-r-N 1 ; akkor
szünet
fi
kész
# mezőelválasztó kikapcsolása
IFS kikapcsolása

kimenet:

futtassa a szkriptet.

$ bash loop25.sh

az ‘apache’ alapú összes futó folyamat PID-je megjelenik a kimenetben.

ugrás a tetejére

a fájl bármely karakterláncának keresése a hurok használatával, majd kilépés

hozzon létre egy hónap nevű fájlt.txt a következő tartalommal az alábbiakban megadott bash szkript teszteléséhez.

hónap.txt

January
February
March
April
May
June
July
August
September
October
November
December

‘míg a’ hurok a következő példában a hónap olvasására szolgál.TXT fájl soronként. Ha bármelyik sor tartalmazza a “June” értéket, akkor kiírja az “Enjoy summer vacation” – t, és megszűnik a szkriptből, különben a $line értékét fogja kinyomtatni.

#!/bin / bash
# állítsa be a fájlnevet, hogy olvassa el a
filename=”month.txt”
# fájl olvasása sorról sorra
míg IFS= read-r sor
do
# ellenőrizze, hogy a sor értéke megegyezik-e júniussal
# zárja le a programot, ha a feltétel igaz
ha ];
akkor
echo “élvezze a nyári vakációt”
kilépés 0
else
echo $sor
fi
kész < $fájlnév

kimenet:

futtassa a szkriptet.

$ bash loop26.sh

itt a ‘június’ szerepel a fájlhónapban.txt, amely megszünteti a hurkot. Tehát a ‘június’ utáni más hónapneveket nem fogja olvasni a hurok.

ugrás a tetejére

kombinálja a bash-t a curl-lel az URL-ből származó adatok kiértékeléséhez

az adatok átvihetők a Bash bármely hálózati szerverére vagy onnan a ‘curl’ parancs használatával bármely támogatott protokollal, például HTTP, FTP, TELNET stb. Ez egy parancssori eszköz. A következő példában látható, hogy a ‘curl’ parancs hogyan használható az URL-ből származó adatok kiértékelésére a For loop használatával. Itt a For loop elolvassa az url listáját, és átadja az egyes URL-értékeket a curl-ben, és kinyomtatja az URL-től kapott adatokat.

#!/ bin / bash
# olvassa el az egyes URL-eket a listából
az url-hez a “yahoo.com” “youtube.com”
do
# HTTP válaszkód nyomtatása minden URL-hez
echo $url; curl-v-m 5-s $1 “$url” | grep HTTP/1.1;
done

kimenet:

futtassa a szkriptet.

$ bash loop27.sh

ugrás a tetejére

adatok olvasása a netcat által küldött portról a While loop

‘netcat’ paranccsal lehet adatokat olvasni és írni a hálózaton keresztül tcp vagy udp protokoll használatával. az ‘ NC ‘parancs a Bash-ban a’ netcat ‘ parancs futtatására szolgál. A következő példa az ‘nc’ parancs használatát mutatja be a while ciklusban. Itt a parancsfájl megpróbál csatlakozni az 1234-es porthoz az nc paranccsal, és kinyomtat egy üzenetet a másik terminálba, ha tud csatlakozni. Meg kell nyitnia egy másik terminál ablakot vagy fület az ‘nc localhost 1234’ parancs futtatásához a kapcsolat létrehozásához. A kapcsolat létrehozása után bármely üzenet átvihető az egyik terminálról a másikra.

#!/bin / bash
echo ” hallgatás az 1234-es porton …”
# olvassa el a netcat által átadott üzenetet az 1234-es porton
miközben olvassa a szöveget
do
# zárja le a hurkot, ha a kapott üzenet “quit”
if ; akkor
echo “Bye”
szünet
else
echo “$text”
fi
# üzenet nyomtatása, amikor a port csatlakozik
kész < <((printf “Üdvözöljük.\r \ nírjon be néhány üzenetet:”) | nc-l 1234)

kimenet:

futtassa a szkriptet egy terminálon, hogy elindítsa a hallgatást a porton 1234.

$ bash loop28.sh

ezután nyisson meg egy másik terminált, és futtassa a következő parancsot a

első terminállal való kommunikációhoz.

$ NC localhost 1234

üdvözlő üzenetet jelenít meg a második terminálon. Ha a felhasználó beír valamit a második terminálba, akkor az megjelenik az első terminálon. Amikor a felhasználó beírja a ‘quit’ szót a második terminálba, akkor a szkript egy üzenet megjelenítésével fejeződik be, ‘Viszlát’ az első terminálon.

ugrás a tetejére

ping URL hurok használatával

megtudhatja, hogy bármely webhely él-e vagy sem, ha végrehajtja a ‘ping’ parancsot a webhely URL-jével. a ‘ping’ parancsot a ‘google.com’ a következő példában ellenőrizze, hogy az internetkapcsolat működik-e vagy sem. Míg a hurok 5 alkalommal ismétlődik a szkriptben, és megpróbálja pingelni google.com. Ha a szerver válaszol, akkor kiírja, hogy “az Internet működik”, és megszünteti a ciklust. Ha a hurok 5-ször ismétlődik, és nem kap szerver választ, akkor kiírja, hogy”nincs internetkapcsolat”.

#!/ bin / bash
# állítsa be a számlálót
count=5
while]
do
# próbálja meg pingelni google.com
ping-c 1 google.com
C=$?
# ellenőrizze az állapotkódot
ha ]
akkor
echo “az Internet működik”
kilépés 0
fi
# csökkentse a számlálót
((gróf–))
kész
echo “Nincs internetkapcsolat”

kimenet:

futtassa a szkriptet.

$ bash loop29.sh

hasonló kimenetet kap, ha az internetkapcsolat megfelelően működik.

Go to Top

a top futtatása kötegelt módban hurok és rekord kimenet használatával

a’top’ parancs egy Linux adminisztrációs eszköz, amely a rendszer erőforrásainak használatát vizsgálja, különböző feladatokat kezel és figyeli a futó folyamatokat. A következő példában látható, hogyan futtathatja a ‘top’ parancsot kötegelt módban a For loop használatával, és hogyan tárolhatja a rekordokat egy szöveges fájlban. Itt a-b opció a ‘top’ parancs indításához használható kötegelt módban, a-p opció pedig a figyelni kívánt folyamatazonosító beállításához. A ‘ top ‘ parancs kimenete a kimenetben lesz tárolva.txt fájl.

#!a / bin | bash
# hurok 5 alkalommal ismétlődik, és végrehajtja a
felső parancsot ((i=0; i<5; i++))
do
top-b-p 2875-n1 / tail -1 >> kimenet.txt
done

kimenet:

először futtassa a következő parancsot a futó folyamatok listájának megkereséséhez.

$ ps

most futtassa a szkriptet.

$ bash loop30.sh

futtassa a következő parancsot a parancsfájl kimenetének megtekintéséhez.

$ macska kimenet.txt

ugrás a tetejére

következtetés

a hurkok különböző módon használhatók a bash-ban különböző típusú egyszerű vagy összetett feladatok elvégzéséhez. Hogyan lehet három típusú hurkot használni a bash-ban különböző feladatokhoz, például lista vagy tömb letöltéséhez, fájlok olvasásához vagy bármilyen parancskimenethez stb. ebben a cikkben nagyon egyszerű példák segítségével mutatjuk be. Remélem, ezek a példák segítenek az olvasónak megérteni a bash hurok használatát.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

More: