Bash skripty sú vysoko efektívnym prostriedkom na automatizáciu úloh, najmä tých, ktoré využívajú výhody iných existujúcich programov. Táto automatizácia často vyžaduje opakovanie podobnej operácie niekoľkokrát, čo je presne miesto, kde pre slučku si príde na svoje.
Správcovia systémov Linux a Mac sú zvyčajne oboznámení so skriptovaním cez terminál, ale môžu to dokonca aj používatelia Windows zapojte sa do akcie so subsystémom Windows pre Linux.
Potrebujete bez prerušenia používania systému Linux prepnúť na iný počítač alebo spustiť virtuálny počítač? Namiesto toho používajte Linux vo Windows 10 s Bash shell terminálom!
Ako fungujú skripty Bash
Bashový skript je jednoducho obyčajný textový súbor obsahujúci sériu príkazov, ktoré môže bash shell čítať a vykonávať. Bash je predvolený shell v macOS pred Catalinou a vo väčšine distribúcií Linuxu.
Ak ste nikdy predtým nepracovali s shell skriptom, mali by ste začať s úplne najjednoduchším prípadom. To vám umožní precvičiť si kľúčové koncepty vrátane vytvorenia skriptu a jeho vykonania.
Najskôr vytvorte nasledujúci súbor na vhodnom mieste (ideálne je otvoriť terminál a najskôr prejsť do požadovaného adresára):
#! / bin / bash
ozvena „Ahoj, svet“
Prvý riadok hovorí, čo program spustí, ako ho má spustiť (t. J. Pomocou tlmočníka bash). Druhý je iba príkaz ako každý iný, ktorý môžete zadať na príkazovom riadku. Uložte súbor ako ahoj_svet.sh, potom:
$ chmod + x hello_world.sh
$ ./hello_world.sh
The chmod príkaz na prvom riadku urobí súbor spustiteľným, čo znamená, že ho možno spustiť zadaním jeho názvu, ako v druhom riadku.
Ak uvidíte slová „Hello, World“, ktoré sú vytlačené na riadku vo vašom termináli, potom všetko funguje podľa potreby.
Ako fungujú slučky
Vo všeobecnom programovaní existujú dva hlavné typy cyklu for: číselný a pre každý. Číselný typ je tradične najbežnejší, ale pri použití bash je to zvyčajne naopak.
Číselné znaky pre slučky sa zvyčajne zameriavajú na jedno celé číslo, ktoré určuje, koľko iterácií sa uskutoční, napríklad:
pre (i = 0; i <100; i ++) {
/ * príkazy na opakované vykonávanie * /
}
Toto je slušne vyzerajúca slučka for, ktorá bude iterovať presne 100-krát, pokiaľ nie je v rámci slučky zmenené, alebo iný príkaz spôsobí zastavenie vykonávania slučky for.
Smyčky Foreach majú naopak tendenciu pracovať so štruktúrami, ako sú zoznamy alebo polia, a iterovať s každou položkou v tejto kolekcii:
people = ["Peter", "Paul", "Mary"]
foreach (ľudia ako osoba) {
if (person == "Paul") {
...
}
}
Niektoré jazyky používajú mierne odlišnú syntax, ktorá zamieňa poradie zhromažďovania a položiek:
people = ["Peter", "Paul", "Mary"]
pre (osoba v ľuďoch) {
if (person == "Paul") {
...
}
}
Pre v slučkách
V bash, foreach - alebo pre v- slučka je bežnejšia. Základná syntax je jednoduchá:
pre arg v [zozname]
robiť
/ * príkazy na opakované vykonávanie * /
/ * hodnotu arg je možné získať pomocou $ arg * /
hotový
Napríklad na iteráciu prostredníctvom troch výslovne pomenovaných súborov:
pre súbor v one.c two.c three.c
robiť
je to „súbor $“
hotový
Ak takéto súbory existujú v aktuálnom adresári, výstup z tohto skriptu bude:
one.c
dva.c
tri.c
Namiesto pevnej sady súborov je možné zoznam získať pomocou globálneho vzoru (jeden vrátane zástupných znakov - špeciálnych znakov, ktoré zastupujú ďalšie znaky). V nasledujúcom príklade cyklus for opakuje všetky súbory (v aktuálnom adresári), ktorých názvy končia príponou „.xml“:
pre súbor v * .xml
robiť
ls -l "$ súbor"
hotový
Tu je niekoľko príkladov výstupu:
$ -rw-r - r-- 1 bobby staff 2436 3. novembra 2019 feed.xml
$ -rw-r - r-- 1 bobby staff 6447 27 okt 16:24 sitemap.xml
Môže to vyzerať veľmi zdĺhavo:
$ ls -l * .xml
Ale je tu podstatný rozdiel: slučka for vykoná je program 2 samostatné časy, pričom zakaždým sa mu odovzdá jeden názov súboru. V samostatnom príklade ls sa vzor glob (* .xml) najskôr zhoduje s názvami súborov a potom ich všetky odošle ako jednotlivé parametre príkazového riadku do jednej inštancie je.
Tu je príklad, ktorý používa wc (počet slov), aby bol rozdiel zrejmejší:
$ wc -l * .xml
44 feed.xml
231 sitemap.xml
275 celkom
The wc program spočíta počet riadkov v každom súbore osobitne, potom vytlačí celkový počet naprieč všetkými. Naproti tomu, ak wc pracuje v rámci cyklu for:
pre súbor v * .xml
robiť
wc -l $ súbor
hotový
Počet stále uvidíte pre každý súbor:
44 feed.xml
231 sitemap.xml
Neexistuje však celkový súhrnný súčet, pretože wc je spustený izolovane, zakaždým, keď slučka iteruje.
Keď zoznam nie je zoznam
Pri práci s cyklami for je veľmi jednoduchá a častá chyba kvôli spôsobu, akým bash spracováva citované argumenty / reťazce. Prechádzanie zoznamom súborov by malo prebiehať takto:
pre súbor v one.c two.c
Nie takto:
pre súbor v „one.c two.c“
Druhý príklad uzatvára názvy súborov do dvojitých úvodzoviek, výsledkom čoho je zoznam iba s jedným parametrom; slučka for sa vykoná iba raz. Tomuto problému sa dá vyhnúť použitím premennej v týchto prípadoch:
SÚBORY = "one.c two.c"
pre súbor v $ FILES
robiť
...
hotový
Upozorňujeme, že samotné vyhlásenie o premennej musí obsahovať svoju hodnotu v úvodzovkách!
Pre Bez zoznamu
Keďže nie je potrebné nič opakovať, cyklus for pracuje s akýmikoľvek argumentmi príkazového riadku, ktoré boli poskytnuté skriptu po vyvolaní. Napríklad ak máte pomenovaný skript args.sh obsahuje nasledovné:
#! / bin / sh
pre
robiť
echo $ a
hotový
Potom vykonaním súboru args.sh získate nasledujúce informácie:
$ ./args.sh jedna dve tri
jeden
dva
tri
Bash pozná tento prípad a lieči za úlohu ako ekvivalent za a $ @ do kde $ @ je špeciálna premenná predstavujúca argumenty príkazového riadku.
Emulácia tradičnej číselnej hodnoty pre slučku
Bash skripty sa často zaoberajú zoznamami súborov alebo riadkami výstupu z iných príkazov, takže cyklus for in je bežný. Tradičná operácia v štýle c je však stále podporovaná:
pre ((i = 1; i <= 5; i ++))
robiť
echo $ i
hotový
Toto je klasická forma s tromi časťami, v ktorých:
- premenná sa inicializuje (i = 1) pri prvom stretnutí so slučkou
- slučka pokračuje, pokiaľ je podmienka (i <= 5) pravdivá
- zakaždým okolo slučky sa premenná zvyšuje (i ++)
Iterácia medzi dvoma hodnotami je dosť častou požiadavkou, že existuje kratšia a o niečo menej mätúca alternatíva:
pre i v {1..5}
robiť
echo $ i
hotový
Rozšírenie zátvorky, ktoré prebieha, efektívne prevádza vyššie uvedené pre cyklus do:
pre i v 1 2 3 4
Jemnejšie ovládanie slučky s prerušením a pokračovaním
Zložitejšie pre slučky často potrebujú spôsob ukončenia predčasného alebo okamžitého opätovného spustenia hlavnej slučky s ďalšou hodnotou. Ak to chcete urobiť, bash si požičia prerušenie a pokračuje v príkazoch, ktoré sú bežné v iných programovacích jazykoch. Tu je príklad, ktorý pomocou oboch vyhľadá prvý súbor, ktorý má viac ako 100 znakov:
#! / bin / bash
pre súbor v *
robiť
ak [! -f "$ súbor"]
potom
echo "$ súbor nie je súbor"
ďalej
fi
num_chars = $ (wc -c echo $ súbor je „$ num_chars znakov dlhý“
ak [$ num_chars -gt 100]
potom
echo "Nájdený $ súbor"
prestávka
fi
hotový
Smyčka for tu funguje na všetky súbory v aktuálnom adresári. Ak súbor nie je bežným súborom (napr. Ak je to adresár), na opätovné spustenie cyklu s ďalším súborom sa použije príkaz continue. Ak je to normálny súbor, druhý podmienený blok určí, či obsahuje viac ako 100 znakov. Ak je to tak, príkaz break sa použije na okamžité opustenie cyklu for (a na koniec skriptu).
Záver
Bashový skript je súbor obsahujúci súbor pokynov, ktoré je možné vykonať. Smyčka for umožňuje, aby sa časť skriptu opakovala mnohokrát. Vďaka použitiu premenných, externých príkazov a príkazov break and continue môžu bash skripty uplatniť zložitejšiu logiku a vykonávať širokú škálu úloh.
Správa naznačuje, že štítky na ochranu osobných údajov aplikácií spoločnosti Apple môžu mať určité problémy.
- Programovanie
- Linux
Bobby je technologický nadšenec, ktorý takmer dve desaťročia pracoval ako vývojár softvéru. Je vášnivým hrám, pracuje ako redaktor recenzií v magazíne Switch Player Magazine a je ponorený do všetkých aspektov online publikovania a vývoja webu.
Prihlásiť sa ku odberu noviniek
Pripojte sa k nášmu bulletinu s technickými tipmi, recenziami, bezplatnými elektronickými knihami a exkluzívnymi ponukami!
Ešte jeden krok…!
V e-maile, ktorý sme vám práve poslali, potvrďte svoju e-mailovú adresu.