Pokud začínáte se systémy Linux, termíny jako "Shell scripting" nebo „Bash skriptování “ mohou být docela běžné – Ale co znamenají? Než se dostaneme k podrobnostem, osvojení si skriptování Bash vám může pomoci ušetřit čas při spouštění a provádění různých systémových úloh a lépe porozumět příkazovému řádku (Terminálu) Linuxu a automatizovat různé systémové úlohy.
Co je to Bash?
Bash, zkratka pro „Bourne-Again-Shell,“ je unixový shell nebo interpret příkazového jazyka pro operační systém GNU. Byl to hlavní Shell pro distribuce Linuxu a vydání Apple macOS před macOS Catalina. Bash je k dispozici také pro Windows 10 prostřednictvím subsystému Windows pro Linux.
Bash obvykle běží v textovém okně běžně známém jako Terminál, kde uživatelé zadávají příkazy k provádění různých úkolů. Bash může také spouštět příkazy zapsané v souboru, což je metoda označovaná jako "bash skriptování."
Rozdíl mezi Bash skriptováním a Shell skriptováním
Skriptování Shell a skriptování Bash nejsou totéž. S Bash skriptováním explicitně používáte bash shell. Na druhou stranu, Shell skriptování může být docela široké slovo, protože máme k dispozici jiné shelly než Bash. Mezi nejběžnější patří Korn (ksh), C shell (csh), Z shell (zsh) a Bash shell (sh). Nebylo by však překvapením, kdybychom našli lidi, kteří používají bash skriptování a shell skriptování zaměnitelně, aby znamenali totéž. Náš příspěvek na Top 6 Open Source Shells pro Linux poskytuje podrobný popis těchto shellů.
V tomto příspěvku se podíváme na skriptování Bash. Ve výchozím nastavení mnoho dostupných distribucí Linuxu využívá prostředí Bash. Podívejte se na náš příspěvek o 6 nejlepších distribucích Linuxu pro začátečníky. Chcete-li potvrdit shell, který používáte ve vaší aktuální distribuci Linuxu, spusťte příkaz na terminálu.
echo $SHELL
Z obrázku výše můžete vidět výchozí interpret v mém systému je bash. V současné době používám Ubuntu 20.04 LTS. Pojďme se ponořit!
Porozumění skriptům Bash
Bash skripty jsou textové soubory obsahující bash příkazy, které se spouštějí k provádění různých úkolů. K psaní těchto skriptů potřebujete pouze jednoduchý textový editor, jako je gedit, listová podložka, vim, nano a mnoho dalších. Nezapomeňte prosím uložit své skripty pomocí .sh
rozšíření a jako prostý text a nikoli formátovaný text. Jedním z mých oblíbených editorů, které používám pro psaní skriptů, je nano editor.
Pojmenování, přiřazení oprávnění a spuštění skriptu Bash
Jak je vysvětleno výše, ujistěte se, že používáte pro své bash skripty příponu .sh. Můžete mít například skript s názvem fosslinux_backup.sh
. Nejlepší by však bylo, kdybyste byli s pojmenováváním svých skriptů opatrní. Většina lidí například ráda ukládá většinu svých skriptů jako „test“. Většina neznámá existuje unixový vestavěný příkaz zvaný test, který kontroluje typy souborů a porovnává hodnoty. Pomocí příkazu which můžete zkontrolovat, zda existuje program se stejným názvem, jako má váš skript, abyste předešli případným konfliktům programu.
který [příkaz]např. který test
Z výše uvedeného výstupu vidíme, že test je již vestavěný příkaz. Proto, abych se vyhnul konfliktům mezi programy, nebudu žádný ze svých skriptů pojmenovávat jako „test“.
Chcete-li, aby byl skript spustitelný pro každého uživatele, použijte následující příkaz:
chmod +x [script.sh]
Chcete-li, aby byl skript spustitelný pro aktuálního uživatele, použijte následující příkaz:
chmod u+x [script.sh]
Nyní pro spuštění skriptu spusťte níže uvedený příkaz:
./[script_name]
S výše uvedenou metodou si uvědomíte, že budete muset použít cd
příkaz k přesunutí do adresáře obsahujícího skript nebo předání cesty ke skriptu. Existuje však řešení. Uložte skripty do bin
adresář přítomný v domovském adresáři.
S nedávnými aktualizacemi většina distribucí nepřichází s bin
složku ve výchozím nastavení. Budete jej tedy muset vytvořit ručně. Umístěním skriptů do této složky můžete skript spustit zadáním jeho názvu do terminálu bez použití cd
a ./
příkazy.
Pokyny pro skriptování Bash
Než napíšete svůj první skript, existuje několik pokynů, kterým musíte při psaní skriptů porozumět.
- Všechny vaše skripty by měly začínat řádkem „#!/bin/bash.“
- Umístit každý příkaz na nový řádek.
- Každý komentář začíná
#
symbol. - Příkazy jsou uzavřeny pomocí
()
závorky.
#!/bin/bash
Příkaz (Hash-Bang Hack) je cesta k shellu, který budeme používat. Pokud používáte jiný shell, budete muset tuto cestu upravit. Chápeme, že všechny komentáře začínají #
symbol. Pokud však následuje znak (!)
v Hash-Bang Hack je skript nucen provést s shellem, na který ukazuje tento řádek. V našem případě je to shell Bash.
Váš první skript Bash
Jako většina programovacích jazyků napíšeme skript, který vypíše „Ahoj světe“ příkaz při provedení. Otevřete svůj oblíbený textový editor a vložte níže uvedené příkazy. Uložte textový soubor jako fossHelloWorld.sh
nebo jakýkoli jiný název, který není vestavěným příkazem.
#!/bin/bash#Tento skript vytiskne 'Ahoj světe' na Terminalecho "Ahoj světe"
Jakmile soubor uložíte, udělejte jej spustitelným provedením příkazu níže:
chmod +x fossHelloWorld.sh
Nyní jej spusťte pomocí příkazu níže:
./fossHelloWorld.sh
Výše uvedený skript má pouze tři řádky. První je Hash-Bang Hack, o kterém jsme hovořili výše, druhý je komentář a třetí je příkaz, který bude proveden. Poznámka:komentáře se nikdy nespouštějí.
Podívejme se na další funkce skriptování bash, které můžete využít.
Příkaz Echo
Příkaz Echo se používá k tisku výstupu na příkazovém řádku systému Linux nebo na terminálu. Pokud jste vývojář a již jste s PHP pracovali, určitě jste se s tímto příkazem také setkali. Pojďme napsat malý bash skript, který demonstruje, jak tento příkaz funguje.
#!/bin/bash#Vytiskněte první řádek "Toto je Fosslinux.com – s novým řádkem"#Vytiskněte druhý příkaz bez nového řádku -n "Toto je Fosslinux – žádný nový řádek"Uložte skript, přidělte požadovaná oprávnění a spusťte jej.
Pro pochopení kódu vytiskne první příkaz echo příkaz a přejde na další řádek. Druhý příkaz echo má
-n
argument, který zabraňuje skriptu přejít na další řádek. S příkazem Echo můžete použít mnoho dalších možností, včetně proměnných, jak uvidíme níže.Proměnné
Proměnné jsou běžnou a nezbytnou součástí každého programovacího jazyka. Proměnné Bash lze deklarovat několika způsoby. Při přiřazování hodnoty jakékoli proměnné nemusíte používat žádné symboly. Při volání hodnoty proměnné však budete muset použít
$
znaménko na začátku proměnné.Proměnné můžete použít na terminálu nebo jako skripty. Proveďte níže uvedené příkazy na svém terminálu.
myWebsite ="Fosslinux.com"echo $myWebsiteNyní vytvoříme bash skript, který vezme dva vstupy od uživatele a uloží je do proměnných
$x
a$y
. Skript poté zkontroluje, zda jsou tyto dvě hodnoty stejné nebo ne.#!/bin/bashecho "Zadejte první číslo"přečtěte aecho "Zadejte druhé číslo"přečtěte bif [[ $a -eq $b ]]thenecho "Čísla se rovnají"elseecho "Čísla se nerovnají"fiUložte skript a spusťte jej. Z obrázku níže můžete vidět, že jsme zadali různé hodnoty a skript byl schopen zkontrolovat, zda jsou stejné nebo ne.
Nyní se podívejme blíže na kód. První dva příkazy echo vyzvou uživatele k zadání prvního a druhého čísla.
read
příkaz počká, až uživatel zadá číslo a uloží jej do zadané proměnné. V našem případě je toa
ab
. Pak máme příkaz if, který kontroluje, zda jsou tyto dvě hodnoty stejné nebo ne.Podmíněné prohlášení
V jakémkoli programovacím jazyce řídí tok programu podmíněné příkazy. Část kódu se spustí pouze tehdy, když je splněna určitá podmínka. Některé z nejběžnějších podmíněných příkazů zahrnují „if-then-else“ a „case“. Níže je uvedena základní syntaxe příkazu if-then-else.
if [[ podmínka ]]potomjinak fi Podívejte se na níže uvedený skript, který využívá podmíněný příkaz „if-then-else“.
#!/bin/bashecho "Zadejte svůj věk"přečíst ageif ((věk> 18 ))thenecho "Můžete jít na večírek"elseecho "Nejste způsobilí jít na večírek"fiPojďme si projít skript výše. Máme
echo
prohlášení, které vyzve uživatele k zadání jejich věkového čísla.read
příkaz ukládá zadaný věk do proměnné „věk“. Poté máme podmíněný příkaz if-then-else, který kontroluje, zda je věk vyšší než 18 let, než dá uživateli pokyn.Smyčky
Smyčky se běžně používají, když chcete provést část kódu vícekrát. Například, pokud bych chtěl echo 1000 řádků výroku „Vítejte ve Fosslinuxu“, potřeboval bych 1000 echo příkazů. U cyklů však vše, co musím udělat, je zadat, kolikrát chci, aby byl příkaz ozván nebo vytištěn na terminálu. Bash podporuje tři typy smyček; Pro smyčku, smyčku While a smyčku Until. Podívejme se na každou z nich.
-
Smyčka For
Smyčka For se používá k iteraci seznamu specifikovaných dat nebo pole. Níže je uvedena základní syntaxe Bash For Loop;
pro hodnotu v 1 2 3 4 5 .. Ndoinstrukce1instrukce2instrukce-Ndone
nebo,
pro VALUE v souboru1 soubor2 soubor3doinstrukce1 na $VALUEinstruction2instruction-Ndone
Podívejte se na skript níže. Iteruje dané dny v týdnu a tiskne je na Terminálu řádek po řádku.
#Přečtěte si název dne v týdnu v každé iteraci smyčky pro den v pondělí Úterý Středa Čtvrtek Pátek Sobota Neděledoecho "$day"hotovo
Uložme skript jako ForLoop.sh
a provést to. Níže je snímek obrazovky s výstupem.
To je jen jednoduchý příklad toho, co můžete dělat s For Loop. Můžete jej také zkombinovat s podmíněnými příkazy k dokončení konkrétního úkolu.
-
The While Loop
Smyčka While provádí konkrétní úlohu, zatímco konkrétní podmínka zůstává pravdivá. V každé iteraci smyčka nejprve zkontroluje podmínku před provedením pokynů. Když je podmínka False, smyčka se ukončí. Základní syntaxe cyklu bash While je následující:
zatímco [CONDITION]proveďte[COMMANDS]hotovo
Můžeme mít například skript, který vytiskne prohlášení „Vítejte na FOSSLINUX.COM“ 20krát, dokud není proměnná X nastavena na 20. Zkusme to prakticky implementovat. Podívejte se na skript níže.
#!/bin/bashx=1zatímco [ $x -le 20 ]doecho "Vítejte na FOSSLINUX.COM"x=$(( $x + 1 ))hotovo
Uložme skript jako WhileLoop.sh
a provést to. Níže je snímek obrazovky s výstupem.
Podívejme se na skript While Loop výše. Nejprve deklarujeme proměnnou X a dáme jí hodnotu 1. Poté vytvoříme příkaz While, který vydá příkaz „Vítejte na FOSSLINUX.COM“, zatímco X je menší než 20. Nakonec zvýšíme X o jednu po každé iteraci.
-
Smyčka Až do
Smyčky Bash Until se používají k provádění sady instrukcí nebo příkazů, pokud je nastavená podmínka vyhodnocena jako nepravda. Níže je uvedena základní syntaxe smyčky Until.
dokud [CONDITION]neuděláte[POKYNY/PŘÍKAZY]hotovo
Podobně jako u smyčky While, smyčka Until nejprve vyhodnotí nastavenou podmínku před provedením pokynů nebo příkazů. Pokud se podmínka vyhodnotí jako nepravda, instrukce se provedou. Cyklus je ukončen, když se podmínka vyhodnotí jako pravdivá. Podívejte se na příklad níže.
#!/bin/bashcount=0until [ $count -gt 5 ]doecho Counter:$count((count++))hotovo
Poté, co výše uvedený skript uložíme a spustíme, dostaneme výstup níže:
Výše uvedené skripty nejprve vytvoří počet proměnných a nastaví jej na nulu (0). To je podmínka, která řídí tok našeho programu. Smyčka Until kontroluje, zda je hodnota počtu větší než 5. Pokud není, vytiskne předané pokyny. Pokud je však hodnota větší než 5, smyčka se okamžitě ukončí. Nakonec zvýšíme hodnotu počtu o 1 (count++).
Funkce Bash
Při programování a skriptování se funkce používají k uchování opakovaně použitelného kódu potřebného k provedení konkrétního úkolu. Pokud tedy máte podobné příkazy, které chcete provádět v různých částech skriptu, nemusíte tyto příkazy opakovaně psát. Uzavřete je do funkce a místo toho funkci spusťte.
Níže je základní syntaxe funkce Bash.
název_funkce () {}
nebo,
funkce název_funkce {}
Vytvořme jednoduchý skript, který využívá funkce. Nejprve vytvoříme funkci nazvanou „myFunction“, která po zavolání vydá prohlášení „Ahoj, jsem první funkce“. Druhá funkce, „myCities“, je trochu pokročilá, protože vyžaduje předané argumenty. Argumenty jsou uvedeny po zavolání názvu funkce. Jsou dostupné ve funkci jako $1.
#!/bin/bashmyFunction () {echo "Dobrý den, jsem první funkce"echo "Dobrý den, jsem první funkce"echo}echo "Toto je druhá funkce" funkce myCities () {echo Ahoj $1}myFunctionmyCities Washington, D.CmyCities Phoenix
Po uložení a spuštění skriptu dostaneme výstup níže.
Nabídky Bash
Při psaní skriptu k provedení pokročilé úlohy může být nutné, aby uživatel vybral jednu možnost z několika možností zobrazených na terminálu. Abychom toho dosáhli, použijeme bash select
příkaz.
Vytváří jednoduchý skript nabídky, který vyzve uživatele, aby si ze seznamu vybrali své oblíbené distribuce Linuxu. Podívejte se na skript níže.
#!/bin/bash#Vytisknout zprávu pro uživatelské echo "Vyberte svou oblíbenou distribuci Linuxu"vyberte distribuci v Ubuntu Fedora OpenSUSE DeepIN Parrot ArchLinux Kalido#Vytiskněte vybranou hodnotuif [[ $distro =="Konec" ]]poté ukončete 0elseecho "Vybraná distribuce Linuxu je $distro"fidone
Uložme skript jako menu.sh a spusťte jej. Získáme výstup níže.
Ve výše uvedeném skriptu máme seznam distribuce Seven Linux, kterou uživatel vybere. Poté, co provedou výběr, uloží se do proměnné distro
a později vytištěn zřetězením s řetězcem „Vybraná distribuce Linuxu je.“ Bash select menu může být docela užitečné, zvláště když máte více skriptů provádějících různé úkoly a jeden musíte vybrat ten, který chcete spustit.
Aritmetika
Každý programovací jazyk podporuje provádění aritmetických operací a skriptování bash není výjimkou. Způsob, jakým provádíme aritmetické operace, je však trochu jiný. Níže je jeden ze způsobů, jak můžete provádět aritmetické operace v bash. Podíváme se na čtyři typy aritmetických operací – součet, dělení a násobení.
#!/bin/bash# Vypočítat výsledek součtu=$((70+15))# Vytisknout hodnotu součtu "součet =$výsledek"# Vypočítat výsledek dělení=$((100/25))# Vytisknout hodnotu dělení " dělení =$result"#Calculate Multiplicationresult=$((15*15))echo "Multiplikace =$result"
Uložme výše uvedený skript jako aritmetický.sh a spusťte jej. Získáme výstup níže.
Závěr
Toto je úplný průvodce pro začátečníky, jak začít se skriptováním v Bash. Nicméně v Bash je toho víc, než co je popsáno v tomto tutoriálu. Jedním z míst, které bych doporučil pro zlepšení vašich dovedností, je GNU’s Bash Reference Manual. Pokud narazíte na nějaké problémy nebo se k tomuto příspěvku vyjádříte, neváhejte a klikněte na komentáře níže.