はじめに
こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事はLinuxコマンドの同士の連携についてです。
パイプ
まずは基本的なところで、パイプです。
これは最初に実行したコマンドの結果を次のコマンドに渡すものです。例えばですが、以下のようなコマンドの場合です。
ls | grep "test"
この場合、ls
の表示結果を右のgrep
コマンドに渡しています。パイプで繋げる場合、よく使われるのがgrep
コマンドです。
このコマンドは表示結果やファイルの中身などから特定の文字列が含まれているものだけを表示してくれます。なので、ls
のコマンドで出てくる出力結果からtest
という文字列が含まれているものだけを出力する形ですね。
左のコマンドに出力結果がない場合でも、コマンドは実行されます。空の場合は何も表示されず終了します。
論理AND (&&)
次に論理ANDを紹介します。これは最初のコマンドが実行されたら次のコマンドを実行するシンプルな記述です。
mkdir test && cd test
以下のコマンドを実行すると、mkdir
コマンドでディレクトリを作成した後に、そのままそのディレクトリにcd
で移っています。
&&の場合、左のコマンドが実行失敗した場合は右のコマンドは実行されませんのでご注意ください。
論理OR (||)
次に論理ORを紹介します。こちらはANDと違って、前のコマンドが失敗した時に次のコマンドを実行します。
三つ以上実行した場合は以下になります。
command1 || command2 || command3
command1が成功の場合:
command2とcommand3は実行されないです。
command1が失敗の場合:
command2が実行されます。成功した場合はcommand3は実行されないです。
command2も失敗の場合:
command3が実行されます。
前のコマンドが成功した場合のみ、次のコマンドを実行するという点に注意したいですね。
セミコロン (;
)
コマンドを順番に実行します。前のコマンドが成功しようと失敗しようと、関係なく次を実行してくれます。
cd test; ls
前のコマンドが失敗したらそのまま終わって欲しい場合は&&を使いましょう。
バックグラウンドで実行 (&
)
コマンドをバックグラウンドで実行してくれます。例えばsleep
コマンドという、シェルの処理を指定した時間分一時停止してくれるコマンドがあります。
sleep 10 &
本来末尾に&
がない場合、シェルはコマンドなどを受け付けないまま固まるのですが、末尾に&
をつけるとsleep
コマンドを裏で実行してくれます。
コマンドの置き換え($())
これはコマンドの結果を他のコマンドで使えるようにします。あとは変数に入れたりですね。
echo "今日の天気は$(date)です。"
今日の天気は2024年 12月16日 月曜日 19時31分35秒 JSTです。
シェルスクリプトのif文で使用してみる。
if [ "$(whoami)" = "root" ]; then
echo "あなたはrootユーザーです。"
else
echo "あなたは通常のユーザーです。"
fi
シェルスクリプトを作成して実行してみると、以下のような結果になりました。
シェルスクリプトを実行するには実行権限をつける必要があります。chmodコマンドを使いましょう。実際、別にやらなくて結構です。
おわりに
今回はコマンドをつなげてみようといった記事でした。
どれも結構使いますね。Dockerfileなどでもコマンドをつなげてコンテナ内の環境構築を一気にやることが多いです。
とはいえ、初学者向けの記事なので、まずは&&
から使い始めてください。
余談
最近分厚い技術書を3冊購入したせいで、リュックが重くてしょうがないです。。
PC + 技術書は腰にきます(泣)