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.

Ako získať Linux Bash Shell v systéme Windows 10

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.

instagram viewer

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:

  1. premenná sa inicializuje (i = 1) pri prvom stretnutí so slučkou
  2. slučka pokračuje, pokiaľ je podmienka (i <= 5) pravdivá
  3. 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.

Email
Štítky ochrany osobných údajov spoločnosti Apple nemusia byť úplne presné

Správa naznačuje, že štítky na ochranu osobných údajov aplikácií spoločnosti Apple môžu mať určité problémy.

Súvisiace témy
  • Programovanie
  • Linux
O autorovi
Bobby Jack (Publikovaných 19 článkov)

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.

Viac od Bobbyho Jacka

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.

.