GNU/Linux >> Znalost Linux >  >> Linux

Propojené příkazy s ovládacími operátory v Bash

Často se používají jednoduché složené příkazy – například spojení několika příkazů v sekvenci na příkazovém řádku. Tyto příkazy jsou odděleny středníky, které definují konec příkazu. Chcete-li vytvořit jednoduchou řadu příkazů shellu na jednom řádku, jednoduše oddělte jednotlivé příkazy středníkem, například takto:

command1 ; command2 ; command3 ; command4 ; 

Nemusíte přidávat poslední středník, protože stisknutí klávesy Enter znamená konec posledního příkazu, ale je dobré ho přidat kvůli konzistenci.

Linuxový terminál

  • 7 nejlepších emulátorů terminálu pro Linux
  • 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
  • Stáhnout nyní:SSH cheat sheet
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Výukové programy příkazového řádku systému Linux

Všechny příkazy poběží bez problémů – pokud nedojde k chybě. Ale co se stane, když dojde k chybě? Pomocí && můžeme chyby předvídat a počítat s nimi a || ovládací operátory zabudované do Bash. Tyto dva ovládací operátory poskytují určité řízení toku a umožňují nám měnit sekvenci provádění kódu. Středník a nový řádek znak jsou také považovány za ovládací operátory Bash.

&& operátor jednoduše říká "pokud je příkaz1 úspěšný, spusťte příkaz2." Pokud příkaz1 z jakéhokoli důvodu selže, příkaz2 se nespustí. Tato syntaxe vypadá takto:

command1 && command2

To funguje, protože každý příkaz vrací do shellu kód, který indikuje, zda byl během provádění úspěšně dokončen nebo selhal. Podle konvence návratový kód (RC) 0 (nula) označuje úspěch a jakékoli kladné číslo označuje určitý typ selhání. Některé nástroje správce systému vracejí pouze 1 k označení jakékoli chyby, ale mnoho z nich používá jiné kladné číselné kódy k označení typu selhání.

$? shellu Bash proměnnou lze velmi snadno zkontrolovat skriptem, dalším příkazem v seznamu příkazů nebo dokonce přímo sysadminem. Podívejme se na RC. Můžeme spustit jednoduchý příkaz a okamžitě zkontrolovat RC, který se bude vždy týkat posledního spuštěného příkazu.

[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$

Tento RC je 0, což znamená, že příkaz byl úspěšně dokončen. Nyní zkuste stejný příkaz v adresáři, kde nemáme oprávnění.

[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$

Význam tohoto RC lze nalézt v ls manuálová stránka příkazu.

Vyzkoušíme && ovládací operátor, jak by mohl být použit v programu příkazového řádku. Začneme něčím jednoduchým:Vytvořte nový adresář, a pokud bude úspěšný, vytvořte v něm nový soubor.

Potřebujeme adresář, kde můžeme vytvářet další adresáře. Nejprve si ve svém domovském adresáři vytvořte dočasný adresář, kde můžete provést nějaké testování.

[student@studentvm1 ~]$ cd ; mkdir testdir

Vytvořte nový adresář v ~/testdir , který by měl být prázdný, protože jste ho právě vytvořili, a poté v tomto novém adresáři vytvořte nový prázdný soubor. Následující příkaz provede tyto úkoly.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1 
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$

Víme, že vše fungovalo, jak má, protože testdir adresář je přístupný a lze do něj zapisovat. Změňte oprávnění na testdir takže již není přístupný uživateli student takto:

[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$

Pomocí grep příkaz za dlouhým seznamem (ll ) zobrazuje výpis pro testdir . Můžete vidět, že uživatel student již nemá přístup k testdir adresář. Nyní spusťte téměř stejný příkaz jako předtím, ale změňte jej tak, aby vytvořil jiný název adresáře v testdir .

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$

Přestože jsme obdrželi chybovou zprávu pomocí && ovládací operátor zabraňuje dotyku příkaz se nespustil, protože při vytváření testdir3 došlo k chybě . Tento typ řízení logického toku příkazového řádku může zabránit skládání chyb a vytváření skutečného nepořádku. Pojďme to ale trochu zkomplikovat.

|| ovládací operátor nám umožňuje přidat další příkaz, který se provede, když počáteční příkaz programu vrátí kód větší než nula.

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$

Naše složená syntaxe příkazu využívající řízení toku má tuto obecnou formu, když používáme && a || ovládací operátory:

preceding commands ; command1 && command2 || command3 ; following commands

Složenému příkazu používajícímu ovládací operátory mohou předcházet a následovat další příkazy, které mohou souviset s příkazy v sekci řízení toku, ale které nejsou ovlivněny řízením toku. Všechny tyto příkazy se vykonají bez ohledu na cokoli, co se děje uvnitř složeného příkazu řízení toku.

Tito operátoři řízení toku mohou zefektivnit práci na příkazovém řádku tím, že zpracovávají rozhodnutí a dávají nám vědět, když nastal problém. Používám je přímo na příkazovém řádku i ve skriptech.

Adresář a jeho obsah můžete odstranit jako uživatel root.

[root@studentvm1 ~]# rm -rf /home/student/testdir

Jak používáte ovládací operátory Bash? Dejte nám vědět v sekci komentářů.


Linux
  1. 6 Operátorů řetězení příkazového řádku Bash Shell v Linuxu

  2. Jak vytvořit špičku CPU pomocí příkazu bash

  3. '&&' vs. '&' s příkazem 'test' v Bash

  1. Sledujte příkazy a úkoly pomocí příkazu watch v systému Linux

  2. Rozdíl mezi operátory Bash [[ Vs [ Vs ( Vs ((?

  3. příkaz bash watch se zachovanými barvami

  1. Bash skript s `set -e` se nezastaví při příkazu `… &&…`?

  2. Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

  3. 15 užitečných vestavěných příkazů Bash Shell (s příklady)