Bash skripty jsou vysoce účinným prostředkem automatizace úkolů, zejména těch, které využívají výhod jiných existujících programů. Tato automatizace často vyžaduje opakování podobné operace několikrát, což je přesně tam, kde pro smyčku přijde na své.

Správci systémů Linux a Mac jsou se skriptováním pomocí terminálu obvykle obeznámeni, ale mohou to i uživatelé Windows zapojte se do akce se subsystémem Windows pro Linux.

Jak získat Linux Bash Shell v systému Windows 10

Potřebujete používat Linux bez času k přepnutí na jiný počítač nebo ke spuštění virtuálního počítače? Spusťte Linux ve Windows 10 místo toho s terminálem Bash shell!

Jak fungují skripty Bash

Skript bash je jednoduše soubor ve formátu prostého textu obsahující řadu příkazů, které může bash shell číst a spouštět. Bash je výchozí prostředí v pre-Catalina macOS a většině distribucí Linuxu.

Pokud jste nikdy předtím nepracovali s shell skriptem, měli byste začít absolutně nejjednodušším případem. To vám umožní procvičit klíčové koncepty včetně vytvoření skriptu a jeho provedení.

instagram viewer

Nejprve vytvořte následující soubor na vhodném místě (v ideálním případě otevřete terminál a nejprve přejděte do požadovaného adresáře):

#! / bin / bash
echo "Hello, World"

První řádek říká, co program spouští, jak jej spustit (tj. Pomocí interpretu bash). Druhý je pouze příkaz jako každý jiný, který můžete zadat na příkazovém řádku. Uložte soubor jako ahoj_svět.sh, pak:

$ chmod + x hello_world.sh
$ ./hello_world.sh

The chmod příkaz na prvním řádku dělá soubor spustitelným, což znamená, že jej lze spustit zadáním jeho názvu, jako na druhém řádku.

Pokud uvidíte slova „Hello, World“ vytištěná na řádku ve vašem terminálu, pak vše funguje podle potřeby.

Jak fungují smyčky

V obecném programování existují dva hlavní typy smyčky for: číselný a pro každého. Číselný typ je tradičně nejběžnější, ale při použití bash je to obvykle naopak.

Číselné pro smyčky se obvykle zaměřují na jedno celé číslo, které určuje, kolik iterací bude provedeno, například:

pro (i = 0; i <100; i ++) {
/ * příkazy k opakovanému provádění * /
}

Jedná se o známou smyčku, která bude iterovat přesně 100krát, pokud se ve smyčce nezmění i, nebo jiný příkaz nezastaví provádění smyčky for.

Naopak smyčky Foreach mají tendenci pracovat se strukturami, jako jsou seznamy nebo pole, a iterovat pro každou položku v této kolekci:

people = ["Peter", "Paul", "Mary"]
foreach (lidé jako osoba) {
if (person == "Paul") {
...
}
}

Některé jazyky používají mírně odlišnou syntaxi, která zamění pořadí kolekce a položky:

people = ["Peter", "Paul", "Mary"]
pro (osoba v lidech) {
if (person == "Paul") {
...
}
}

Pro ve smyčkách

V bash, foreach - nebo pro v- smyčka je častější. Základní syntaxe je jednoduše:

pro arg v [seznamu]
dělat
/ * příkazy k opakovanému provádění * /
/ * hodnotu arg lze získat pomocí $ arg * /
Hotovo

Například k iteraci třemi explicitně pojmenovanými soubory:

pro soubor v one.c two.c three.c
dělat
je "$ soubor"
Hotovo

Pokud takové soubory existují v aktuálním adresáři, výstup z tohoto skriptu bude:

one.c
dva
tři

Místo pevné sady souborů lze seznam získat pomocí glob vzor (jeden včetně zástupných znaků - speciální znaky, které představují jiné znaky). V následujícím příkladu smyčka for iteruje napříč všemi soubory (v aktuálním adresáři), jejichž názvy končí na „.xml“:

pro soubor v * .xml
dělat
ls -l "$ soubor"
Hotovo

Zde je několik příkladů výstupu:

$ -rw-r - r-- 1 bobby staff 2436 3. listopadu 2019 feed.xml
$ -rw-r - r-- 1 bobby staff 6447 27 října 16:24 sitemap.xml

Může to vypadat velmi zdlouhavě:

$ ls -l * .xml

Ale je tu podstatný rozdíl: smyčka for provede je naprogramujte 2 samostatné časy a pokaždé mu předejte jeden název souboru. V samostatném příkladu ls se vzor glob (* .xml) nejprve shoduje s názvy souborů a poté odešle všechny jako jednotlivé parametry příkazového řádku do jedné instance je.

Zde je příklad, který používá toaleta (počet slov), aby byl rozdíl ještě zřetelnější:

$ wc -l * .xml
44 feed.xml
231 sitemap.xml
275 celkem

The toaleta program spočítá počet řádků v každém souboru zvlášť, poté vytiskne celkový počet napříč všemi. Naproti tomu, pokud toaleta pracuje v rámci smyčky for:

pro soubor v * .xml
dělat
wc -l $ soubor
Hotovo

Počet jednotlivých souborů se stále zobrazuje:

44 feed.xml
231 sitemap.xml

Neexistuje však celkový souhrnný součet, protože toaleta je spuštěn izolovaně, pokaždé, když smyčka iteruje.

Když seznam není seznam

Při jednání se smyčkami existuje velmi snadná a běžná chyba, kvůli tomu, jak bash zpracovává citované argumenty / řetězce. Procházení seznamu souborů by mělo probíhat takto:

pro soubor v one.c two.c

Tak to ne:

pro soubor v „one.c two.c“

Druhý příklad uzavírá názvy souborů do uvozovek, což vede k seznamu pouze s jedním parametrem; smyčka for se provede pouze jednou. Tomuto problému lze zabránit použitím proměnné v takových případech:

SOUBORY = "one.c two.c"
pro soubor v $ FILES
dělat
...
Hotovo

Všimněte si, že samotná deklarace proměnné musí uzavřít svou hodnotu do uvozovek!

Pro bez seznamu

Protože není nutné nic iterovat, smyčka for pracuje s libovolnými argumenty příkazového řádku, které byly skriptu poskytnuty při vyvolání. Například pokud máte pojmenovaný skript args.sh obsahující následující:

#! / bin / sh
pro
dělat
echo $ a
Hotovo

Provedení args.sh vám poskytne následující:

$ ./args.sh jedna dvě tři
jeden
dva
tři

Bash tento případ rozpozná a zachází za úkol jako ekvivalent za $ @ do kde $ @ je speciální proměnná představující argumenty příkazového řádku.

Emulace tradiční číslice pro smyčku

Bash skripty se často zabývají seznamy souborů nebo řádky výstupu z jiných příkazů, takže smyčka for in je běžná. Tradiční operace ve stylu c je však stále podporována:

pro ((i = 1; i <= 5; i ++))
dělat
ozvěna $ i
Hotovo

Toto je klasická forma se třemi částmi, ve kterých:

  1. proměnná je inicializována (i = 1) při prvním setkání se smyčkou
  2. smyčka pokračuje, dokud je podmínka (i <= 5) pravdivá
  3. pokaždé kolem smyčky se proměnná zvýší (i ++)

Iterace mezi dvěma hodnotami je dostatečně běžným požadavkem, že existuje kratší a o něco méně matoucí alternativa:

pro i v {1..5}
dělat
ozvěna $ i
Hotovo

Expanze složené závorky efektivně převádí výše uvedenou smyčku na:

pro i v 1 2 3 4

Jemnější ovládání smyčky s přerušením a pokračováním

Složitější pro smyčky často potřebují způsob předčasného ukončení nebo okamžité restartování hlavní smyčky s další hodnotou. Za tímto účelem si bash vypůjčí příkazy break a continue, které jsou běžné v jiných programovacích jazycích. Zde je příklad, který oba používá k vyhledání prvního souboru, který má více než 100 znaků:

#! / bin / bash
pro soubor v *
dělat
pokud [! -f "$ soubor"]
pak
echo "$ soubor není soubor"
pokračovat
fi
num_chars = $ (wc -c echo $ soubor je "$ num_chars znaků dlouhý"
pokud [$ num_chars -gt 100]
pak
echo "Nalezen $ soubor"
přestávka
fi
Hotovo

Smyčka for zde funguje na všechny soubory v aktuálním adresáři. Pokud soubor není běžným souborem (např. Pokud je to adresář), použije se příkaz continue k restartování smyčky s dalším souborem. Pokud se jedná o běžný soubor, druhý podmíněný blok určí, zda obsahuje více než 100 znaků. Pokud ano, příkaz break se používá k okamžitému opuštění smyčky for (a dosažení konce skriptu).

Závěr

Bashový skript je soubor obsahující sadu pokynů, které lze provést. Smyčka for umožňuje mnohokrát opakovat část skriptu. Díky použití proměnných, externích příkazů a příkazů break and continue mohou bash skripty použít složitější logiku a provádět celou řadu úkolů.

E-mailem
Štítky ochrany osobních údajů společnosti Apple nemusí být zcela přesné

Zpráva naznačuje, že štítky ochrany osobních údajů aplikací společnosti Apple mohou mít určité problémy.

Související témata
  • Programování
  • Linux
O autorovi
Bobby Jack (Publikováno 19 článků)

Bobby je technologický nadšenec, který většinu softwarových vývojářů pracoval téměř dvě desetiletí. Je vášnivým hráčem, pracuje jako editor recenzí v časopisu Switch Player Magazine a je ponořen do všech aspektů online publikování a vývoje webových stránek.

Více od Bobbyho Jacka

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji s technickými tipy, recenzemi, bezplatnými elektronickými knihami a exkluzivními nabídkami!

Ještě jeden krok…!

V e-mailu, který jsme vám právě poslali, potvrďte svou e-mailovou adresu.

.