Úvod
V tomto článku vám vysvětlím 6 řetězových operátorů příkazového řádku Bash Shell (Linuxový operátor). Nyní pojďme diskutovat o tom, co je operátor řetězení. Operátor řetězení je něco, co pomáhá spouštět více příkazů najednou, jako když spustíme skript a úloha se dokončí automaticky. Lidé obvykle používají při skriptování shellu příkazové řádky Bash Shell Chaining Operators (Linuxový operátor), ale také můžeme tyto operátory použít na příkazovém řádku shellu.
Zde budeme diskutovat níže o příkazovém řádku Bash shellu Chaining Operators (operátor Linuxu):
- Operátor &&(operátor AND)
- Operátor NEBO (||)
- Operátor AND &OR (&&a ||)
- Operátor potrubí (|)
- Operátor středník (;)
- Operátor ampersand (&)
Nyní si proberme každého jednoho operátora jeden po druhém.
1. Operátor &&(operátor AND)
Syntaxe pro použití operátoru AND je :
# command 1 && command 2
Operátor AND provede druhý příkaz pouze v případě, že se první příkaz provede úspěšně. Nyní se podívejte na syntaxi výše. Zde se příkaz 2 provede pouze v případě, že se příkaz 1 provede úspěšně. Například:
Jak vidíte níže, první příkaz byl úspěšně dokončen, a proto byl proveden druhý příkaz df -h.
$ ping -c 5 localhost && df -h PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.067 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.086 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.085 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.081 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.086 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4100ms rtt min/avg/max/mdev = 0.067/0.081/0.086/0.007 ms Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
Nyní otestujeme operátor AND jiným způsobem. Zde selžu první příkaz a uvidím, zda se druhý příkaz provede nebo ne.
$ ping -c 5 local && df -h ping: unknown host local
Jak můžete vidět výše, první příkaz selhal, takže druhý příkaz nebyl proveden.
2. Operátor OR (||)
V našem seznamu je druhý Bash shell příkazového řádku Chaining Operators (Linuxový operátor) operátor OR. Syntaxe pro použití operátoru OR je :
# command 1 || command 2
Operátor OR je úplný opak operátora &&. Operátor OR provede druhý příkaz pouze v případě, že první příkaz selže. Nyní si vezměme příklad :
$ ping -c 5 local || df -h ping: unknown host local Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
Jak můžete vidět výše, druhý příkaz byl proveden, tj. „df -h“, protože první příkaz selhal.
3. AND &OR operátor (&&a ||)
Kombinace &&Operator &OR Operator (||) je docela zajímavá a při správném použití vám poskytne pěkný výstup. Kombinace těchto 2 operátorů jako příkaz if...else v programování. Vezměme si příklad, abyste o tom získali více nápadů:
Příklad:1
Zde jsem se pokusil o úspěch prvního příkazu a po úspěšném provedení prvního příkazu se nám zobrazí zpráva Adresář byl úspěšně vytvořen.
$ mkdir data && echo "Directory created successfully" || echo "Directory creation failed" Directory created successfully
Jak můžete vidět výše, náš první příkaz byl úspěšně proveden, takže jsme schopni získat požadovanou zprávu.
Příklad:2
Zde jsem se pokusil o selhání prvního příkazu a po selhání prvního příkazu se zobrazí zpráva Vytvoření uživatele se nezdařilo.
$ useradd helpdesk && echo "User created successfully" || echo "User creation failed" useradd: user 'helpdesk' already exists User creation failed
Jak můžete vidět výše, náš první příkaz selhal, takže jsme schopni získat požadovanou zprávu.
4. Operátor PIPE (|)
Čtvrtý Bash shell příkazového řádku Chaining Operators (Linuxový operátor) je PIPE Operator (|). PIPE je druh operátoru, který lze použít k zobrazení výstupu prvního příkazu převzetím vstupu druhého příkazu. Například chcete zkontrolovat všechny aktuálně spuštěné systémové procesy pomocí příkazu ps -ef. ale protože seznam procesů je tak dlouhý, že jej nelze pokrýt na jedné obrazovce. V takovém případě můžete použít Operátor filtru s příkazem more. Viz příkaz níže:
$ ps -ef | more UID PID PPID C STIME TTY TIME CMD 0 1 0 0 19Oct18 ?? 28:26.69 /sbin/launchd 0 47 1 0 19Oct18 ?? 0:39.18 /usr/sbin/syslogd 0 48 1 0 19Oct18 ?? 0:18.18 /usr/libexec/UserEventAgent (System) 0 51 1 0 19Oct18 ?? 0:15.91 /System/Library/PrivateFrameworks/Uninstall.framework/Resources/uninstalld 0 52 1 0 19Oct18 ?? 0:34.08 /usr/libexec/kextd 0 53 1 0 19Oct18 ?? 4:35.44 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Support/fseventsd 55 58 1 0 19Oct18 ?? 0:02.25 /System/Library/CoreServices/appleeventsd --server 0 59 1 0 19Oct18 ?? 11:23.76 /usr/sbin/systemstats --daemon 0 61 1 0 19Oct18 ?? 0:40.65 /usr/libexec/configd 0 62 1 0 19Oct18 ?? 6:05.79 /System/Library/CoreServices/powerd.bundle/powerd 0 63 1 0 19Oct18 ?? 1:16.99 /Library/PrivilegedHelperTools/com.80pct.FreedomHelper 0 67 1 0 19Oct18 ?? 3:01.31 /usr/libexec/logd ...
5. Středník operátor (;)
Pátý Bash shell příkazový řádek Chaining Operators (Linuxový operátor) je středník operátor (;). Středník operátor provádí více příkazů najednou postupně, jak je zmíněno, a poskytuje výstup bez závislosti na úspěchu a neúspěchu jiných příkazů, jako je operátor &&a operátor OR (||). Podívejte se na příklad níže:
$ ping -c 5 localhost ; ifconfig ens33 ; df -h PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.063 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.085 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.086 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.086 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4091ms rtt min/avg/max/mdev = 0.063/0.082/0.091/0.011 ms ens33 Link encap:Ethernet HWaddr 00:0c:29:ff:cd:2e inet addr:192.168.43.185 Bcast:192.168.43.255 Mask:255.255.255.0 inet6 addr: 2405:204:f017:75dd:65af:f027:85c2:88eb/64 Scope:Global inet6 addr: 2405:204:f017:75dd:f076:72b8:fd36:757f/64 Scope:Global inet6 addr: fe80::b396:d285:b5b3:81c3/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:146608 errors:0 dropped:0 overruns:0 frame:0 TX packets:78275 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:188124508 (188.1 MB) TX bytes:6912561 (6.9 MB) Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 60K 199M 1% /run/user/1000
6. Operátor ampersand (&)
Šestý operátor příkazového řádku Bash shellu Chaining Operator (operátor Linuxu) je operátor Ampersand (&). Ampersand Operator je druh operátora, který provádí zadané příkazy na pozadí. Tento operátor můžete použít k provádění více příkazů najednou.
Výhodou tohoto operátoru je, že vás nenechá čekat s použitím příkazového řádku, dokud nebude daný příkaz dokončen. Například pingnete na www.thegeekdiary.com s 50 pakety. jak víte, že dokončení 50 paketů bude nějakou dobu trvat. Bez použití Ampersand Operator musíte počkat na dokončení 50 paketů, abyste mohli spustit další příkaz, ale pomocí tohoto operátoru můžete použít shell prompt a aktuálně daný příkaz, tj. ping poběží na pozadí a to je krása Ampersand Operator.
$ ping -c 50 localhost &
Pomocí operátoru Ampersand můžete také provádět více příkazů. Viz příkaz níže.
$ ping -c 5 localhost & df -h & [1] 25962 [2] 25963 $ PING localhost (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.052 ms Filesystem Size Used Avail Use% Mounted on udev 966M 0 966M 0% /dev tmpfs 199M 12M 187M 6% /run /dev/sda1 18G 5.3G 12G 32% / tmpfs 992M 212K 992M 1% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 992M 0 992M 0% /sys/fs/cgroup tmpfs 199M 56K 199M 1% /run/user/1000 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.070 ms 64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.091 ms 64 bytes from localhost (127.0.0.1): icmp_seq=5 ttl=64 time=0.117 ms --- localhost ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4072ms rtt min/avg/max/mdev = 0.052/0.084/0.117/0.022 ms
Jak můžete vidět výše, výstup obou příkazů přichází současně.