Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

Linuxで覚えておきたい10個のコマンド連結演算子と実用例

Linuxにおける「コマンドの連結(チェーン)」とは、複数のコマンドを1行にまとめ、その間に挟んだ演算子の働きに応じて実行を制御するテクニックです。シェル上で小さなスクリプトを書くのに近い感覚で、ターミナルから直接手軽に実行できます。定型作業の自動化はもちろん、無人で稼働するサーバーをより体系的かつ安定して動作させるうえでも非常に有効です。

あわせて読みたい: Awkと正規表現を使ってファイル内のテキストを抽出・フィルタリングする方法

本記事では、日常的によく使われるコマンド連結演算子を10個厳選し、簡潔な説明と実際の実行例とともに解説します。これらを使いこなせるようになれば、短くて意味のあるコマンドラインが書けるようになり、作業効率が向上し、場合によってはシステムへの負荷軽減にもつながります。

1. アンパサンド演算子(&)

&」の役割は、コマンドをバックグラウンドで実行することです。コマンドの後に半角スペースを空けて「&」を付けるだけでOK。複数のコマンドを一度にバックグラウンドへ回すことも可能です。

1つのコマンドをバックグラウンドで実行する例:

$ ping -c5 www.tecmint.com &

2つのコマンドを同時にバックグラウンドで実行する例(root権限が必要):

# apt-get update & apt-get upgrade &

2. セミコロン演算子(;)

セミコロン「;」を使うと、複数のコマンドを1行で続けて記述でき、左から順番に逐次実行されます。

# apt-get update ; apt-get upgrade ; mkdir test

この例では、まずパッケージのupdateが実行され、次にupgrade、最後にカレントディレクトリ直下に「test」ディレクトリが作成されます。

3. AND演算子(&&)

AND演算子(「&&」)は、最初のコマンドの実行が成功した場合(終了ステータスが0)にのみ、次のコマンドを実行します。直前のコマンドの成否を確認しながら処理を進めたいときに非常に便利です。

たとえば、linksコマンドでサイト「tecmint.com」を開きたいけれど、その前にホストが稼働しているかどうかを確認したい場合は、次のように書きます。

# ping -c3 www.tecmint.com && links www.tecmint.com

4. OR演算子(||)

OR演算子(「||」)は、プログラミングにおける「else文」に近い働きをします。最初のコマンドが失敗した場合(終了ステータスが1)にのみ、2番目のコマンドが実行されます。

たとえば、root権限のない一般ユーザーで「apt-get update」を実行して失敗した場合に、「links www.tecmint.com」が実行される例を見てみましょう。

$ apt-get update || links tecmint.com

この例ではユーザーにシステム更新の権限がないため、最初のコマンドの終了ステータスは「1」となり、後続の「links tecmint.com」が実行されます。

では、最初のコマンドが成功して終了ステータスが「0」だった場合はどうなるでしょうか?当然ながら、2番目のコマンドは実行されません。

$ mkdir test || links tecmint.com

このケースでは、ホームディレクトリにフォルダ「test」を作成します。権限があるため正常に終了ステータス「0」で完了し、最後のコマンドはスキップされます。

5. NOT演算子(!)

NOT演算子(「!」)は「〜以外」という条件指定のような働きをします。指定した条件に該当するもの以外をすべて対象にできます。

理解を深めるために、ホームディレクトリに「tecmint」ディレクトリを作成して移動してみましょう。

$ mkdir tecmint
$ cd tecmint

次に、拡張子の異なる複数のファイルを作成します。

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

作成されたファイルを確認してみます。

$ ls

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

ここで、「html」ファイルだけを残し、それ以外をスマートに一括削除してみます。

$ rm -r !(*.html)

lsコマンドで結果を確認しましょう。

$ ls

a.html b.html

※この書式を使うには、bashでextglobオプション(shopt -s extglob)が有効になっている必要があります。

6. AND–OR演算子(&& ||)

これはAND演算子とOR演算子を組み合わせたもので、プログラミングの「if-else文」のように振る舞います。

たとえばtecmint.comに対してpingを実行し、成功すれば「Verified(検証済み)」、失敗すれば「Host Down(ホスト停止)」と表示させることができます。

$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"
実行結果(接続時)
PING www.tecmint.com (212.71.234.61) 56(84) bytes of data.
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=1 ttl=55 time=216 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=2 ttl=55 time=224 ms
64 bytes from www.tecmint.com (212.71.234.61): icmp_req=3 ttl=55 time=226 ms

--- www.tecmint.com 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

今度はインターネット接続を切断して、同じコマンドをもう一度実行してみます。

$ ping -c3 www.tecmint.com && echo "Verified" || echo "Host Down"
実行結果(切断時)
ping: unknown host www.tecmint.com
Host Down

7. パイプ演算子(|)

パイプは、最初のコマンドの出力をそのまま次のコマンドの入力として渡す際に使われる、非常に強力な演算子です。たとえば「ls -l」の出力を「less」に渡せば、長い一覧もスクロールしながら快適に閲覧できます。

$ ls -l | less

8. コマンドグループ化演算子({})

波括弧「{ }」を使うと、複数のコマンドをひとまとまりのグループとして扱えます。2番目以降のコマンドの実行を、最初のコマンドの結果に依存させたい場合などに便利です。

たとえば、「bin」ディレクトリの有無を確認し、存在しなければ作成するという処理は次のように書けます。

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

9. 優先順位演算子(())

丸括弧「()」を使うと、コマンドの評価・実行の優先順位を明示的に指定できます。

Command_x1 && Command_x2 || Command_x3 && Command_x4

この擬似コマンドでCommand_x1が失敗するとどうなるでしょう?Command_x2はもちろん、Command_x3Command_x4も一切実行されません。そこで優先順位演算子を使って、次のように書き換えます。

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

こうすると、Command_x1が失敗しても、右側のグループ(Command_x3Command_x4)が評価され、Command_x3の終了ステータスに応じて実行されるようになります。

10. エスケープ(連結)演算子(\\)

バックスラッシュ「\\」は、その名のとおり、長いコマンドを複数行にまたがって記述したり、シェルにとって特別な意味を持つ文字(メタ文字)をエスケープしたりするために使います。たとえば、次のコマンドは「test(1).txt」というテキストファイルを開きます。

$ nano test\\(1\\).txt

丸括弧「()」はシェルにとって特別な意味を持つため、直前に「\\」を付けてエスケープすることで、通常のファイル名の一部として正しく扱えるようになります。


以上、Linuxで覚えておきたい10個の連結演算子を紹介しました。これらを状況に応じて組み合わせれば、ワンライナーによる作業の自動化や効率的なシステム管理が格段に楽になります。ぜひ実際のターミナルで試しながら、自分の業務に取り入れてみてください。

  1. Linuxのwatchコマンドの使い方と実用例をわかりやすく解説

    Linuxのwatchコマンドは、指定したコマンドを一定間隔で繰り返し実行し、その結果を画面に表示し続けるためのツールです。コマンドの出力が時間とともにどう変化するかをリアルタイムで監視したい場合に非常に便利です。この記事では、watchコマンドの基本的な使い方と、覚えておくと役立つ実用的な例を紹介します。 watchコマンドの基本構文 watchコマンドの構文は以下のとおりです。 watch オプション コマンド 各要素の意味は次のとおりです。 オプション: 後述の表から選択したオプションを指定します。watchコマンドのデフォルト動作を変更できます。 コマンド: watchが繰り返し実行

  2. Bashシェル関数入門:実用的な6つのサンプル例で学ぶチュートリアル

    Bashシェル関数とは、複数のUNIX/Linuxコマンドをひとつの名前でグループ化し、後からまとめて実行できるようにする仕組みです。Bashシェル関数は通常のUnixコマンドと同じように呼び出すことができ、現在のシェルコンテキスト内で実行されるため、解釈用の新しいプロセスを生成する必要がありません。bashのエイリアス(alias)と関数はどちらも、長いコマンドや複雑なコマンドに対するショートカットを定義するのに役立ちます。しかし、エイリアスでは制御フローや引数の扱いなど、関数ならではの高度な処理を行うことはできません。本記事では、その違いも含めて詳しく解説していきます。この記事は、進行中の