GNU/Linux >> Linux の 問題 >  >> Linux

6 Linux の Bash シェル コマンド ライン チェーン演算子

はじめに

この記事では、6 つの Bash シェル コマンド ライン チェーン オペレーター (Linux オペレーター) について説明します。それでは、連鎖演算子とは何かについて説明しましょう。連鎖演算子は、スクリプトを実行してタスクが自動的に完了するように、一度に複数のコマンドを実行するのに役立つものです。通常、人々はシェル スクリプトで Bash シェル コマンド ライン チェーン オペレーター (Linux オペレーター) を使用しますが、シェル プロンプトでもこれらのオペレーターを使用できます。

ここでは、以下の Bash シェル コマンド ライン チェーン オペレーター (Linux オペレーター) について説明します。

<オール>
  • &&演算子 (AND 演算子)
  • OR 演算子 (||)
  • AND &OR 演算子 (&&および ||)
  • PIPE 演算子 (|)
  • セミコロン演算子 (;)
  • アンパサンド演算子 (&)
  • それでは、各オペレーターについて 1 つずつ説明しましょう。

    1. &&演算子 (AND 演算子)

    AND 演算子を使用する構文は次のとおりです:

    # command 1 && command 2

    AND 演算子は、最初のコマンドが正常に実行された場合にのみ、2 番目のコマンドを実行します。上記の構文を見てみましょう。ここで、コマンド 2 は、コマンド 1 が正常に実行された場合にのみ実行されます。例:

    以下に示すように、最初のコマンドが正常に完了したため、2 番目のコマンド 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

    AND 演算子を別の方法でテストしてみましょう。ここでは、最初のコマンドを失敗させ、2 番目のコマンドが実行されるかどうかを確認します。

    $ ping -c 5 local && df -h
    ping: unknown host local

    上記のように、最初のコマンドが失敗したため、2 番目のコマンドは実行されません。

    2. OR 演算子 (||)

    私たちのリストでは、2 番目の Bash シェル コマンド ライン チェーン オペレーター (Linux オペレーター) は OR オペレーターです。 OR 演算子を使用する構文は次のとおりです:

    # command 1 || command 2

    OR 演算子は &&演算子の正反対です。 OR オペレータは、最初のコマンドが失敗した場合にのみ 2 番目のコマンドを実行します。それでは例を見てみましょう:

    $ 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

    上記のように、実行された 2 番目のコマンド、つまり「df -h」が最初のコマンドとして失敗しました。

    3. AND &OR 演算子 (&&および ||)

    &&演算子と OR 演算子 (||) の組み合わせは非常に興味深いものであり、適切に使用すると優れた出力が得られます。これら 2 つの演算子の組み合わせは、プログラミングの if…else ステートメントのようです。これについてより多くのアイデアを得るために、例を挙げてみましょう:

    例:1

    ここで、最初のコマンドを成功させようとしました。最初のコマンドの実行が成功すると、Directory created successfully というメッセージが表示されます。

    $ mkdir data && echo "Directory created successfully" || echo "Directory creation failed"
    Directory created successfully

    上記のように、最初のコマンドが正常に実行されたため、必要なメッセージを取得できました。

    例:2

    ここで、最初のコマンドに失敗しようとしました。最初のコマンドが失敗した後、ユーザーの作成に失敗しましたというメッセージが表示されます。

    $ useradd helpdesk  && echo "User created successfully" || echo "User creation failed"
    useradd: user 'helpdesk' already exists
    User creation failed

    上記のように、最初のコマンドが失敗したため、必要なメッセージを取得できます。

    4.パイプ演算子 (|)

    4 番目の Bash シェル コマンド ライン チェーン演算子 (Linux 演算子) は、PIPE 演算子 (|) です。 PIPE は、2 番目のコマンドへの入力を取得することによって、最初のコマンドの出力を表示するために使用できる一種の演算子です。たとえば、コマンド ps -ef を使用して、現在実行中のすべてのシステム プロセスをチェックしたいとします。ただし、プロセスのリストは非常に長いため、1 つの画面でカバーすることはできません。その場合、コマンド more で Filter Operator を使用できます。以下のコマンドを参照してください:

    $ 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.セミコロン演算子 (;)

    5 番目の Bash シェル コマンド ライン チェーン演算子 (Linux 演算子) は、セミコロン演算子 (;) です。セミコロン演算子は、複数のコマンドを一度に順番に実行し、&&演算子や OR 演算子 (||) などの他のコマンドの成功と失敗に依存せずに出力を提供します。以下の例をご覧ください:

    $ 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.アンパサンド演算子 (&)

    6 番目の Bash シェル コマンド ライン チェーン オペレーター (Linux オペレーター) は、アンパサンド オペレーター (&) です。アンパサンド オペレーターは、指定されたコマンドをバックグラウンドで実行する一種のオペレーターです。この演算子を使用して、一度に複数のコマンドを実行できます。

    この演算子の利点は、指定されたコマンドが完了するまでシェル プロンプトの使用を待たせないことです。たとえば、50 パケットで www.thegeekdiary.com に ping を実行します。 50 個のパケットを完了するには時間がかかることはご承知のとおりです。アンパサンド オペレータを使用しない場合、別のコマンドを実行するために 50 個のパケットが完了するまで待つ必要がありますが、このオペレータを使用すると、シェル プロンプトと現在指定されているコマンドを使用できます。 /P>

    $ ping -c 50 localhost &

    アンパサンド演算子を使用して複数のコマンドを実行することもできます。以下のコマンドを参照してください。

    $ 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

    上記のように、両方のコマンドの出力が同時に表示されます。


    Linux
    1. Linux でコマンド ライン シェル関数を使用する方法

    2. Linux での Bash シェルの変数について

    3. Linux での chsh コマンドの例

    1. LinuxでBASHコマンドライン履歴をクリアする方法

    2. [ :シェル プログラミングの予期しない演算子

    3. 単一行の場合はバッシュ

    1. Linuxシェルのコマンドラインエイリアス

    2. Bash bangコマンド:Linuxコマンドラインの必知のトリック

    3. 5 Linux Bash コマンドラインで利用可能な標準補完