Skriptování prostředí, konkrétně skriptování Bash, je skvělý způsob, jak automatizovat opakující se nebo únavné úkoly ve vašich systémech. Proč psát, když můžete plánovat a spouštět skripty bez použití rukou? Jedním z mnoha skriptovacích konstruktů je smyčka. Smyčka je část kódu, která sbírá data nebo generuje data a poté s daty provádí nějakou operaci a poté začíná proces znovu, dokud není splněna nějaká podmínka, není skript přerušen nebo dokud nejsou vyčerpána vstupní data. Když používáte Bash skriptování, někdy je užitečné provádět akce pomocí nějaké formy smyček.
[ Čtenářům se také líbilo: Pět způsobů použití operátorů přesměrování v bash ]
Základní příkazy smyčky ve skriptech Bash jsou for
a while
.
for
smyčky se obvykle používají, když máte známý konečný seznam, jako je řada čísel, seznam položek nebo počítadla.while
smyčky lze použít se seznamy, ale jsou také užitečné pro podmínky, které ne mít známý limit. Můžete jej použít ke spouštění příkazů zatímco podmínka je pravdivá (nebo invertujte logiku a spusťte ji, když je podmínka nepravdivá).
Takže i když (zamýšlené slovní hříčkou) existují různé způsoby provádění smyček, v tomto článku se zaměřím na příklady pomocí while
smyčky.
1. Jednoduchá smyčka while
Představte si, že instalujete obrovskou aplikaci a obáváte se, že nakonec může zabrat příliš mnoho místa v systému souborů.
Místo spuštění df
v samostatném terminálu můžete spustit jednoduchý příkaz pro sledování využití disku každou sekundu. To vám umožní přerušit proces instalace, pokud zjistíte, že dosáhne tohoto limitu.
while true
do
df -k | grep home
sleep 1
done
V tomto případě spouštíte smyčku s true stavu, což znamená, že bude běžet navždy nebo dokud nestisknete CTRL-C. Proto jej musíte hlídat (jinak bude nadále využívat systémové prostředky).
Poznámka :Pokud používáte smyčku jako je tato, musíte zahrnout příkaz jako sleep
aby měl systém mezi popravami čas na vydechnutí. Nepřetržité spouštění čehokoli by se mohlo stát problémem s výkonem, zvláště pokud příkazy uvnitř smyčky zahrnují I/O operace.
2. Čekání na splnění podmínky
Existují varianty tohoto scénáře. Například víte, že v určitém okamžiku proces vytvoří adresář a vy jen čekáte na ten okamžik, abyste provedli další ověření.
Můžete mít while
smyčka, která bude neustále kontrolovat existenci tohoto adresáře a psát zprávu pouze tehdy, když adresář neexistuje.
Pokud chcete udělat něco propracovanějšího, můžete vytvořit skript a ukázat jasněji, že se podmínka smyčky stala pravdivou:
#!/bin/bash
while [ ! -d directory_expected ]
do
echo "`date` - Still waiting"
sleep 1
done
echo "DIRECTORY IS THERE!!!"
3. Použití smyčky while k manipulaci se souborem
Další užitečná aplikace while
smyčka je zkombinovat ji s read
pro rychlý přístup ke sloupcům (nebo polím) z textového souboru a provádění některých akcí s nimi.
V následujícím příkladu jednoduše vybíráte sloupce z textového souboru s předvídatelným formátem a tisknete hodnoty, které chcete použít k naplnění /etc/hosts
soubor.
Zde se předpokládá, že soubor má sloupce oddělené mezerami nebo tabulátory a že nejsou žádné mezery v obsahu sloupců. To by mohlo posunout obsah polí a neposkytnout vám to, co jste potřebovali.
Všimněte si, že právě provádíte jednoduchou operaci pro extrakci a manipulaci s informacemi a nezajímáte se o znovupoužitelnost příkazu. Zařadil bych to jako jeden z těch "rychlých a špinavých triků."
Samozřejmě, pokud to bylo něco, co byste dělali opakovaně, měli byste to spustit ze skriptu, použít správná jména proměnných a všechny ty osvědčené postupy (včetně transformace názvu souboru v argumentu a definování, kam se má výstup odeslat, ale dnes je téma while
smyčky).
#!/bin/bash
cat servers.txt | grep -v CPU | while read servername cpu ram ip
do
echo $ip $servername
done
[ Naučte se základy používání Kubernetes v tomto bezplatném cheatu. ]
Sbalit
while
smyčky jsou užitečné ve skriptech, které závisí na tom, zda je určitá podmínka pravdivá nebo nepravdivá, ale můžete je také použít interaktivně ke sledování určité podmínky.
Důležité věci k zapamatování jsou:
Vždy si ujasněte, co je podmínkou ukončit smyčka. Pokud to je něco, co očekáváte, že to uděláte sami, pomocí CTRL-C , pak sledujte svůj příkaz. Přemýšlejte o tom, jak rychle chcete, aby se každý cyklus smyčky opakoval. Pokud provedete jakoukoli operaci, která zahrnuje I/O uvnitř smyčky, stane se to kritickým aspektem plánování.
S ohledem na to se bavte while
můžete.