GNU/Linux >> Znalost Linux >  >> Linux

Bash skriptování (III)

Toto je třetí článek ze série zaměřené na skriptování Gnu Bash. V prvním článku jsme právě vytvořili jednoduchý skript s příkazy, jeden po druhém. Také jsme viděli použití některých proměnných.
Druhý článek se týkal některých struktur kontroly bash. Tento bude pokrývat přesměrování, kanály a nahrazování příkazů.

Staré dobré dny

Na začátku byla zásada:jeden nástroj by měl dělat jednu věc a dělat ji dobře. Bylo na uživateli, aby tyto nástroje zkombinoval, aby dosáhl požadovaných výsledků.

Nyní (přiznejme si to:někdy se i vy můžete cítit ztraceni bez GUI) děláme (téměř) vše s myší. Ale příkazový řádek stále existuje a někdy jindy je psaní příkazů nebo skriptu jednodušší než klikání na každý prvek na obrazovce.

Přesměrování

Můžeme přesměrovat vstup nebo výstup příkazu před provedením. Toto přesměrování můžeme použít k uložení výstupu příkazu do souboru. Nebo můžeme použít přesměrování vstupu ke čtení některých dat ze souboru.

Pokud například chceme uložit aktuální stav (tj. ls -l) složky do textového souboru pro pozdější porovnání změn, použijeme > operátor takto:

ls -l > status.txt

To přesměruje standardní výstup ls -l do souboru s názvem status.txt. Pokud status.txt již existuje, bude přepsán. Chcete-li připojit standardní výstup k existujícímu souboru, použijte >> operátor.

Pro přesměrování standardního vstupu na příkaz použijte < operátor. Například:

mysql somedb < file.sql

Chcete-li přesměrovat standardní chybu do nějakého souboru, přidejte deskriptor souboru 2 (deskriptor souboru 1 je standardní výstup (stdout), 0 je pro vstup (stdin)) do přesměrování:

příkaz 2> soubor

Dávejte pozor, aby mezi číslem deskriptoru souboru a operátorem nebyla mezera. Pokud mezi nimi byla mezera, stane se parametrem „2“. Například:

První příkaz je „ls (soubor) něco “ a přesměrujte chybový výstup na status.txt. Ve druhém příkazu vidíme chybu našeho prvního příkazu:soubor s názvem něco nebyl nalezen.

Třetí příkaz je ls files something a 2 (žádný z nich neexistuje) a přesměruje standardní výstup do status.txt. Chyby (soubor nenalezen) jsou vytištěny na obrazovce a ve čtvrtém příkazu vidíme, že status.txt zůstal prázdný, protože zde nejsou soubory s názvem „2“ nebo „něco“.

Přesměrování můžeme kombinovat, například odeslat stdout a stderr do souboru, ale pořadí přesměrování je důležité. Například:

Z manuálu bash:první příkazy nasměrují pouze standardní výstup do souboru combined.txt, protože standardní chyba byla duplikována ze standardního výstupu, než byl standardní výstup přesměrován na kombinovaný.txt

Při druhém příkazu byl standardní výstup přesměrován do souboru combined.txt a poté byla standardní chyba přesměrována na stdout.

Potrubí

Z manuálu bash:Potrubí je sekvence jednoho nebo více příkazů oddělených jedním z ovládacích operátorů | nebo |& .

První operátor propojí standardní výstup prvního příkazu se standardním vstupem druhého. Například pokud si nepamatuji že mohu použít zástupné znaky v příkazu ls a chci vypsat všechny skripty shellu v aktuální složce, mohu provést ls a filtrovat výstup pomocí grep :

Lidé z Perlu mají motto:«Existuje více než jeden způsob, jak to udělat ». Osobně si myslím, že by to mělo platit (téměř) všude.

Druhý operátor připojí standardní chybu prvního příkazu ke standardnímu vstupu druhého. Například používám příkaz tr (což překládá znaky) k výsměchu chybových zpráv:

Také jsem nastavil proměnnou prostředí LANG, aby se výstup změnil ze španělštiny na angličtinu.

Záměna příkazů

Pomocí substituce příkazů můžeme provést příkaz v našem skriptu a použít výstup tohoto příkazu. Na příkladu je snazší pochopit, jak to funguje. Příkaz seq se používá k vytvoření sekvence čísel:

Tento výstup můžeme například použít k vytvoření složek se sekvenčními názvy se substitucí příkazů. Můžeme použít `příkaz` nebo $(příkaz) .

V tomto příkladu přiřadíme výstup seq 1 5 do proměnné i a použijte jej ve smyčce for.

Zůstaňte naladěni

Zatím máme dost na to, aby za nás udělal (velkou část) práce počítač. Je na vás, abyste prozkoumali ty malé nástroje, které dělají jeden úkol, ale dělají to velmi dobře, a integrovali je pomocí skriptů nebo do příkazového řádku.

U posledního článku této série se soustředím na dialog program pro vytváření GUI (ve skutečnosti TUI) pro přidání interaktivity do našich skriptů.


Linux
  1. Bash skriptování (I)

  2. Použití příkazu Linux Basename ve skriptech Bash

  3. příkaz pro export bash

  1. Vysvětlení příkazu Bash trap

  2. Bash čeká příkaz

  3. Bash četl příkaz

  1. Bash:Zápis do souboru

  2. Linux Tail Command

  3. Linux Touch Command