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

Bashの制御演算子と組み合わせたコマンド

コマンドラインで複数のコマンドを順番に並べるなどの単純な複合コマンドがよく使用されます。このようなコマンドは、コマンドの終わりを定義するセミコロンで区切られます。単純な一連のシェルコマンドを1行で作成するには、次のようにセミコロンを使用して各コマンドを区切るだけです。

command1 ; command2 ; command3 ; command4 ; 

Enterキーを押すと最後のコマンドが終了するため、最後のセミコロンを追加する必要はありませんが、一貫性を保つために追加しても問題ありません。

エラーが発生しない限り、すべてのコマンドは問題なく実行されます。しかし、エラーが発生した場合はどうなりますか? &&を使用して、エラーを予測し、許容することができます および|| Bashに組み込まれている制御演算子。これらの2つの制御演算子は、フロー制御を提供し、コード実行シーケンスを変更できるようにします。セミコロンと改行 文字もBash制御演算子と見なされます。

&& オペレーターは、「command1が成功した場合は、command2を実行してください」と言うだけです。 command1が何らかの理由で失敗した場合、command2は実行されません。その構文は次のようになります:

command1 && command2

これが機能するのは、すべてのコマンドが、実行中に正常に完了したか失敗したかを示すコードをシェルに返すためです。慣例により、0(ゼロ)の戻りコード(RC)は成功を示し、正の数はある種の失敗を示します。一部のシステム管理者ツールは、障害を示すために1を返すだけですが、多くのツールは、他の正の数値コードを使用して障害のタイプを示します。

Bashシェルの$? 変数は、スクリプト、コマンドリストの次のコマンド、またはシステム管理者が直接チェックすることもできます。 RCを見てみましょう。簡単なコマンドを実行してすぐにRCを確認できます。これは、最後に実行されたコマンドに常に関係します。

[student@studentvm1 ~]$ ll ; echo "RC = $?"
total 284
-rw-rw-r--  1 student student   130 Sep 15 16:21 ascii-program.sh
drwxrwxr-x  2 student student  4096 Nov 10 11:09 bin
<snip>
drwxr-xr-x. 2 student student  4096 Aug 18 10:21 Videos
RC = 0
[student@studentvm1 ~]$

このRCは0です。これは、コマンドが正常に完了したことを意味します。次に、権限がないディレクトリで同じコマンドを試してください。

[student@studentvm1 ~]$ ll /root ; echo "RC = $?"
ls: cannot open directory '/root': Permission denied
RC = 2
[student@studentvm1 ~]$

このRCの意味は、 lsにあります。 コマンドのマニュアルページ。

&&を試してみましょう コマンドラインプログラムで使用される可能性のある制御演算子。簡単なことから始めましょう。新しいディレクトリを作成し、それが成功した場合は、その中に新しいファイルを作成します。

他のディレクトリを作成できるディレクトリが必要です。まず、テストを実行できる一時ディレクトリをホームディレクトリに作成します。

[student@studentvm1 ~]$ cd ; mkdir testdir

〜/ testdirに新しいディレクトリを作成します 、作成したばかりなので空になっているはずです。次に、その新しいディレクトリに新しい空のファイルを作成します。次のコマンドはそれらのタスクを実行します。

[student@studentvm1 ~]$ mkdir ~/testdir/testdir2 && touch ~/testdir/testdir2/testfile1 
[student@studentvm1 ~]$ ll ~/testdir/testdir2/
total 0
-rw-rw-r-- 1 student student 0 Nov 12 14:13 testfile1
[student@studentvm1 ~]$

testdir が原因で、すべてが正常に機能したことがわかります。 ディレクトリはアクセス可能で書き込み可能です。 testdirの権限を変更します そのため、ユーザー学生はアクセスできなくなります 次のように:

[student@studentvm1 ~]$ chmod 076 testdir ; ll | grep testdir
d---rwxrw-. 3 student student  4096 Nov 12 14:13 testdir
[student@studentvm1 ~]$

grepを使用する 長いリストの後のコマンド( ll testdirのリストを表示します 。ユーザーが学生であることがわかります testdirにアクセスできなくなりました ディレクトリ。次に、以前とほぼ同じコマンドを実行しますが、コマンドを変更して、 testdir内に別のディレクトリ名を作成します。 。

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
[student@studentvm1 ~]$

エラーメッセージが表示されましたが、 &&を使用しています コントロールオペレーターはタッチを防ぎます testdir3 の作成中にエラーが発生したため、コマンドの実行が停止されました 。このタイプのコマンドライン論理フロー制御は、エラーが複雑になり、実際に混乱するのを防ぐことができます。しかし、もう少し複雑にしましょう。

|| 制御演算子を使用すると、最初のプログラムステートメントがゼロより大きいコードを返したときに実行される別のコマンドを追加できます。

[student@studentvm1 ~]$ mkdir ~/testdir/testdir3 && touch ~/testdir/testdir3/testfile1 || echo "An error occurred while creating the directory."
mkdir: cannot create directory ‘/home/student/testdir/testdir3’: Permission denied
An error occurred while creating the directory.
[student@studentvm1 ~]$

&&を使用する場合、フロー制御を使用する複合コマンド構文はこの一般的な形式を取ります および|| 制御演算子:

preceding commands ; command1 && command2 || command3 ; following commands

制御演算子を使用する複合コマンドの前後には、フロー制御セクションのコマンドに関連する可能性があるが、フロー制御の影響を受けない他のコマンドを続けることができます。これらのコマンドはすべて、フロー制御複合コマンド内で行われるものに関係なく実行されます。

これらのフロー制御オペレーターは、決定を処理し、問題が発生したときに通知することで、コマンドラインでの作業をより効率的にすることができます。スクリプトだけでなく、コマンドラインでも直接使用しています。

rootユーザーとしてクリーンアップして、ディレクトリとその内容を削除できます。

[root@studentvm1 ~]# rm -rf /home/student/testdir

Bash制御演算子をどのように使用しますか?コメントセクションでお知らせください。


  1. Linuxコマンド-知っておくべき基本的なBashコマンドラインのヒント

    Linuxには大量のコマンドがありますが、ほとんどの人はそれらのほんの一部しか使用していません。ターミナルで使用する最もよく使用されるLinuxコマンドのいくつかを次に示します。 最初に、コマンドラインを使いやすくするためのヒントをいくつか紹介します。 オートコンプリートにはタブを使用します。 Linuxターミナルで何かを入力し始めたら、Tabキーを押すと、これまでに入力した文字列で始まる可能なオプションが提案されます。 ctrl+r search_termを使用します 以前に使用したコマンドを検索します。 ctrl+aを使用して行の先頭または末尾にすばやく移動します およびctrl

  2. Linuxで役立つ10の連鎖演算子と実用的な例

    Linuxコマンドの連鎖とは、複数のコマンドを組み合わせて、それらの間で使用されるオペレーターの動作に基づいて実行させることを意味します。 Linuxでのコマンドの連鎖は、シェル自体で短いシェルスクリプトを記述し、ターミナルから直接実行するようなものです。連鎖により、プロセスの自動化が可能になります。さらに、無人の機械は、チェーンオペレーターの助けを借りて非常に体系的な方法で機能することができます。 関連項目: Awkおよび正規表現を使用してファイル内のテキストをフィルタリングする方法 この記事は、頻繁に使用されるコマンドチェーン演算子に光を当てることを目的としています。 、簡単な説明と