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:
- a hurok használata a lista elemeinek olvasásához
- a hurok használata tömb olvasásához
- a hurok használata a karakterláncok listájának olvasásához, szóközökkel
- a hurok használata {START..Vége..Növekmény} tartomány
- a hurok használata {START..Vége..INCREMENT} tartomány visszalépés
- 3 részből álló hurok használata és feltételszámláló
- 3 részből álló hurok használata és több feltétel és művelet vesszővel
- végtelen hurok használata
- feltételes megszakítással és folytatással rendelkező hurok használata
- hurok használata fájlnevek olvasásához globbing segítségével
- hurok használata a
- find parancs kimenetének olvasása a for hurok használata egy könyvtár fájlneveinek rekurzív olvasásához
- a For hurok használata egy könyvtár fájlneveinek rekurzív olvasásához, a
- feltétellel a hurok futtatása a fájl létezik
- a For loop használata a Csomaglista kimenete alapján parancs
- a For loop használata a fájl minden sorának olvasásához
- a For loop használata a fájl minden sorának olvasásához feltételes egyezés alapján
- A While loop használata számlálóval
- a While loop használata felhasználói bemenettel és kilépés a menüből való kilépés kiválasztásakor
- míg a hurkok kombinálása a getopts-szal
- amíg a hurok használata számlálóval
- a felhasználói bevitel alapján zárja le az amíg a hurok
- beágyazott, míg a hurkok
- amíg a hurok használata aludni/várni a Háttérfeladatra kezdődött a script
- használata while loop olvasni pid PS kimenet, amely nem fejeződött be
- Keresés bármely húr egy fájlt a hurok és kilépés
- kombinálása bash és curl, hogy értékelje az adatokat URL
- adatok olvasása egy port által küldött netcat használata közben hurok
- ping URL használata hurok
- futás
- a for hurok használata a lista elemeinek olvasásához
- a For loop használata tömb olvasásához
- a For ciklus használatával olvassa el a
- a hurok használata {START..Vége..INCREMENT} tartomány
- a hurok használata {START..Vége..INCREMENT} tartomány visszalépés
- használata hurok 3 részből és feltétel számláló
- a 3 részből álló hurok és a több feltétel és a vesszővel rendelkező műveletek használata
- végtelen használata a hurokhoz
- feltételes megszakítással és folytatással rendelkező hurok használata
- A for ciklus olvasni fájlnevek által globbing
- a For loop használata a find parancs kimenetének olvasásához
- a For loop használata egy könyvtár fájlneveinek rekurzív olvasásához a
- a For loop használata egy könyvtár fájlneveinek rekurzív olvasásához a
- a ciklus futtatása a fájl létezéséig
- a For loop használata a Csomaglista parancs kimenete alapján
- a For loop használata egy fájl sorainak olvasásához
- a For loop használata a fájl feltételes egyezésű sorainak olvasásához
- a while hurok használata számlálóval
- a while loop használata felhasználói bevitellel, majd kilépés a menüből való kilépés kiválasztásakor
- a
- A amíg hurok számlálóval
- a felhasználói bevitelen alapuló ciklus befejezése
- beágyazott while hurkok használata
- az until loop to sleep/wait for background feladat parancsfájlban történő indítása
- a while loop használata a PID olvasásához a PS kimenetről, amely nem fejeződött be
- a fájl bármely karakterláncának keresése a hurok használatával, majd kilépés
- kombinálja a bash-t a curl-lel az URL-ből származó adatok kiértékeléséhez
- adatok olvasása a netcat által küldött portról a While loop
- ping URL hurok használatával
- a top futtatása kötegelt módban hurok és rekord kimenet használatával
- következteté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.
# 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.
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.
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.
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.
# 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.
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.
# 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.
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.
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.
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.
# 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.
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.
# 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.
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”
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
futtassa a szkriptet.
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.
# 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.
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.
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.
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.
# 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.
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.
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.
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.
# 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.
ugrás a tetejére
‘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.
# 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.
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.
# 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.
futtassa a szkriptet érvénytelen opcióval.
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.
# 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.
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.
# 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.
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.
# 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.
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.
# 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.
ellenőrizze a szkript kimenetét.
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.
# 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.
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
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.
# á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.
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.
# 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.
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.
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.
ezután nyisson meg egy másik terminált, és futtassa a következő parancsot a
első terminállal való kommunikációhoz.
ü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”.
# á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.
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.
# 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.
most futtassa a szkriptet.
futtassa a következő parancsot a parancsfájl kimenetének megtekintéséhez.
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.