Vyhledávání na webu

10 užitečných řetězových operátorů v Linuxu s příklady


Řetězení linuxových příkazů znamená kombinaci několika příkazů a jejich provádění na základě chování operátora použitého mezi nimi.

Řetězení příkazů v Linuxu je něco jako když píšete krátké shell skripty v samotném shellu a spouštíte je přímo z terminálu. Řetězení umožňuje automatizovat proces.

Navíc může bezobslužný stroj fungovat systematicky s pomocí řetězových operátorů.

Tento článek si klade za cíl osvětlit často používané operátory zřetězení příkazů. Poskytuje krátké popisy a odpovídající příklady, které mohou zvýšit vaši produktivitu a umožnit vám psát stručný a smysluplný kód a zároveň občas snížit zatížení systému.

1. Ampersand Operator (&) – Spusťte příkaz Linux na pozadí

Funkce „&“ spočívá v tom, že příkaz běží na pozadí. Stačí zadat příkaz následovaný mezerou a „&“. Na pozadí můžete provést více než jeden příkaz najednou.

Spusťte na pozadí jeden příkaz Linuxu s názvem „ping“:

ping -­c5 linux-console.net &

Spusťte dva nebo více příkazů apt na pozadí současně:

apt update & apt upgrade &

2. Operátor středník (;) – Spuštění více příkazů

Operátor středník (;) umožňuje spustit několik příkazů najednou a provedení příkazu probíhá postupně.

apt update ; apt upgrade ; mkdir test

Výše uvedená kombinace příkazů nejprve provede instrukci update, poté instrukci upgrade a nakonec vytvoří adresář ‚test‘ pod aktuálním pracovním adresářem.

3. Operátor AND (&&) – Po úspěchu spusťte druhý příkaz

Operátor AND (&&) provede druhý příkaz pouze v případě, že provedení prvního příkazu USPĚJE, tj. stav ukončení první příkaz je 0. Tento příkaz je velmi užitečný při kontrole stavu provádění posledního příkazu.

Chci například navštívit web linux-console.net pomocí příkazu links v terminálu, ale předtím musím zkontrolovat, zda je hostitel živý nebo ne.

ping -c3 linux-console.net && links linux-console.net

4. Operátor OR (||) – podmíněné provedení příkazu

Operátor OR (||) je v programování podobný příkazu „jinak“. Operátor || umožňuje provést druhý příkaz pouze v případě, že provedení prvního příkazu selže, tj. stav ukončení prvního příkazu je „1“.

Například chci spustit 'apt update' z účtu jiného uživatele než root, a pokud selže první příkaz, pak druhý příkaz 'links linux-console.net' provede.

apt update || links linux-console.net

Ve výše uvedeném příkazu, protože uživatel neměl povoleno aktualizovat systém, znamená to, že stav ukončení prvního příkazu je '1' a tím se provede poslední příkaz 'links linux-console.net'.

Co když je první příkaz úspěšně proveden se stavem ukončení „0“? Očividně! Druhý příkaz se neprovede.

mkdir test || links linux-console.net

Zde si uživatel ve svém domovském adresáři vytvoří složku ‚test‘, ke které má uživatel oprávnění. Příkaz byl úspěšně proveden s výsledkem ukončení „0“, a proto se poslední část příkazu neprovede.

5. NOT Operator (!) – Selektivní provádění příkazů

Výraz NOT Operator (!) je podobný výrazu „s výjimkou“. Tento příkaz provede všechny kromě zadané podmínky. Abyste tomu porozuměli, vytvořte si ve svém domovském adresáři adresář „tecmint“ a do něj „cd“.

mkdir tecmint 
cd tecmint

Dále vytvořte několik typů souborů ve složce „tecmint“.

touch a.doc b.doc a.pdf b.pdf a.xml b.xml a.html b.html

Podívejte se, že jsme vytvořili všechny nové soubory ve složce „tecmint“.

ls 

a.doc  a.html  a.pdf  a.xml  b.doc  b.html  b.pdf  b.xml

Nyní smažte všechny soubory kromě souboru „html“ najednou, chytrým způsobem pomocí příkazu rm.

rm -r !(*.html)

Jen pro ověření, poslední provedení. Vypište všechny dostupné soubory pomocí příkazu ls.

ls 

a.html  b.html

6. Operátor AND – OR (&& – ||) – Podmíněné provedení příkazů

Výše uvedený operátor je kombinací operátorů „AND“ a „OR“. Je to velmi podobné prohlášení „if-else“.

Udělejme například ping na linux-console.net, pokud se úspěch ozývá „Ověřeno“, jinak „Host Down“.

ping -c3 linux-console.net && echo "Verified" || echo "Host Down"

Ukázkový výstup:

PING linux-console.net (212.71.234.61) 56(84) bytes of data. 
64 bytes from linux-console.net (212.71.234.61): icmp_req=1 ttl=55 time=216 ms 
64 bytes from linux-console.net (212.71.234.61): icmp_req=2 ttl=55 time=224 ms 
64 bytes from linux-console.net (212.71.234.61): icmp_req=3 ttl=55 time=226 ms 

--- linux-console.net ping statistics --- 
3 packets transmitted, 3 received, 0% packet loss, time 2001ms 
rtt min/avg/max/mdev = 216.960/222.789/226.423/4.199 ms 
Verified

Nyní odpojte připojení k internetu a zkuste stejný příkaz znovu.

ping -c3 linux-console.net && echo "verified" || echo "Host Down"

Ukázkový výstup:

ping: unknown host linux-console.net 
Host Down

7. PIPE Operator (|) – Zjednodušené výstupní zpracování

Tento operátor PIPE je velmi užitečný tam, kde výstup prvního příkazu funguje jako vstup pro druhý příkaz. Například zřetěďte výstup „ls -l“ na „méně“ a podívejte se na výstup příkazu.

ls -l | less

drwx------  tecmint tecmint  4.0 KB Thu Nov 16 12:03:02 2023 AnyDesk
drwxrwxr-x  tecmint tecmint  4.0 KB Tue Oct 10 10:44:35 2023 bin
drwxr-xr-x  root    root     4.0 KB Wed Nov 24 22:05:09 2021 DEBIAN
drwxrwxr-x  tecmint tecmint  4.0 KB Sat Nov 18 12:32:49 2023 Desktop
drwx--x---+ tecmint tecmint  100 KB Fri Dec  8 12:00:49 2023 Downloads
drwxrwxr-x  tecmint tecmint  4.0 KB Wed Sep 13 10:25:07 2023 llpp
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 14:26:46 2023 MyImages
drwxrwxr-x  tecmint tecmint  4.0 KB Wed Sep 13 14:55:42 2023 Obsidian Vault
drwxrwxr-x  tecmint tecmint  4.0 KB Tue Oct 10 10:44:32 2023 opt
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 14:46:54 2023 php
drwxrwxr-x  tecmint tecmint  4.0 KB Thu Nov 16 15:54:33 2023 tar_examples
.rw-rw-r--  tecmint tecmint   73 KB Mon Sep 18 11:46:02 2023 Apache-Web-Server-Security.png
.rw-rw-r--  tecmint tecmint  2.2 KB Sun Oct 29 00:17:15 2023 ChatGPT-SEO-Prompts
.rw-rw-r--  tecmint tecmint   41 KB Thu Nov 23 11:34:33 2023 Create-Users-in-Linux.png
...

8. Operátor kombinace příkazů {}

Spojte dva nebo více příkazů, druhý příkaz závisí na provedení prvního příkazu.

Zkontrolujte například, zda je či není dostupný adresář ‚bin‘, a zadejte odpovídající výstup.

[ -d bin ] || { echo Directory does not exist, creating directory now.; mkdir bin; } && echo Directory exists.

9. Precedence Operator() – Správa příkazu k provedení příkazu

Operátor () umožňuje provádět příkazy v pořadí priority.

Command_x1 &&Command_x2 || Command_x3 && Command_x4.

Co když ve výše uvedeném pseudopříkazu selže Command_x1? Žádný z příkazů Command_x2, Command_x3, Command_x4 by se nespustil, k tomu používáme Operátor priority jako:

(Command_x1 &&Command_x2) || (Command_x3 && Command_x4)

Pokud ve výše uvedeném pseudopříkazu selže Command_x1, selže také Command_x2, ale přesto se příkazy Command_x3 a Command_x4 provedou v závislosti na stav ukončení Command_x3.

10. Operátor zřetězení (\) – Víceřádkové zřetězení příkazů

Operátor zřetězení (\), jak název specifikuje, se používá ke zřetězení velkých příkazů přes několik řádků v shellu. Například příkaz níže otevře textový soubor test(1).txt.

nano test\(1\).txt

To je prozatím vše. Brzy přijdu s dalším zajímavým článkem. Do té doby zůstaňte naladěni, zdraví a ve spojení se službou Tecmint. Nezapomeňte nám v sekci komentářů poskytnout svou cennou zpětnou vazbu.