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

Bashスクリプト(III)

これは、GnuBashスクリプトに焦点を当てたシリーズの3番目の記事です。最初の記事では、コマンドを使用した簡単なスクリプトを次々に作成しました。また、いくつかの変数が使用されていることも確認しました。
2番目の記事では、いくつかのbash制御構造について説明しました。これは、リダイレクト、パイプ、およびコマンド置換をカバーします。

古き良き時代

当初は原則がありました。1つのツールで1つのことを実行し、それをうまく実行する必要があります。目的の結果を達成するために、これらのツールを組み合わせるのはユーザーの責任でした。

今、私たちは(それを認めます:あなたもGUIなしで迷子になることがあります)マウスで(ほとんど)すべてを行います。ただし、コマンドラインはまだ存在しており、コマンドやスクリプトを作成する場合は、画面上のすべての要素をクリックするよりも簡単です。

リダイレクト

実行する前に、コマンドの入力または出力をリダイレクトできます。このリダイレクトを使用して、コマンドの出力をファイルに保存できます。または、入力リダイレクトを使用してファイルからデータを読み取ることもできます。

たとえば、フォルダの現在のステータス(つまり、ls -l)をテキストファイルに保存して後で変更を比較する場合は、>を使用します。 このような演算子:

ls -l > status.txt

これにより、 ls -lの標準出力がリダイレクトされます。 status.txtという名前のファイルに。 status.txtがすでに存在する場合は、上書きされます。標準出力を既存のファイルに追加するには、>>を使用します オペレーター。

標準入力をコマンドにリダイレクトするには、<を使用します オペレーター。例:

mysql somedb < file.sql

標準エラーをあるファイルにリダイレクトするには、ファイル記述子2(ファイル記述子1は標準出力(stdout)、0は入力(stdin))をリダイレクトに追加します。

コマンド2>ファイル

ファイル記述子番号と演算子の間にスペースがないことに注意してください。それらの間にスペースがあった場合、その「2」がパラメータになります。例:

最初のコマンドは「ls (ファイル)何か 」と入力し、エラー出力をstatus.txtにリダイレクトします。 2番目のコマンドでは、最初のコマンドのエラーが表示されます。何かという名前のファイルが見つかりません。

3番目のコマンドはlsファイルで何かと2(それらは存在しません)であり、標準出力をstatus.txtにリダイレクトします。エラー(ファイルが見つかりません)が画面に出力され、4番目のコマンドでは、「2」または「something」という名前のファイルがないため、status.txtが空白のままになっていることがわかります。

stdoutとstderrをファイルに送信するなど、リダイレクトを組み合わせることができますが、リダイレクトの順序は重要です。例:

bashマニュアルから:最初のコマンドは、標準出力のみをファイルcombined.txtに転送します。これは、標準出力がcombined.txtにリダイレクトされる前に、標準エラーが標準出力から複製されたためです。

2番目のコマンドでは、標準出力がファイルcombined.txtにリダイレクトされ、次に標準エラーがstdoutにリダイレクトされました。

パイプ

bashマニュアルから:パイプラインは、制御演算子 |の1つによって分離された1つ以上のコマンドのシーケンスです。 または |&

最初のオペレーターは、最初のコマンドの標準出力を2番目のコマンドの標準入力に接続します。たとえば、覚えていない lsコマンドでワイルドカードを使用でき、現在のフォルダーにあるすべてのシェルスクリプトを一覧表示したい lsを実行できます。 grepで出力をフィルタリングします :

Perlの人々にはモットーがあります:«それを行うには複数の方法があります »。個人的には、(ほとんど)どこにでも適用できると思います。

2番目の演算子は、最初のコマンドの標準エラーを2番目のコマンドの標準入力に接続します。たとえば、コマンド trを使用しています (文字を変換します)エラーメッセージのモックに:

また、出力をスペイン語から英語に変更するようにLANGシェル変数を設定しました。

コマンド置換

コマンド置換を使用すると、スクリプト内でコマンドを実行し、そのコマンドの出力を使用できます。例を使用すると、どのように機能するかを理解しやすくなります。コマンドseqは、数列を生成するために使用されます。

たとえば、この出力を使用して、コマンド置換を使用した連続した名前のフォルダーを作成できます。 `コマンド`を使用できます または$(コマンド)

この例では、 seq 1 5の出力を割り当てます。 変数iに 、forループで使用します。

お楽しみに

これまでのところ、私たちはコンピューターに(多くの)仕事をさせるのに十分です。 1つのタスクを実行するが、それを非常にうまく実行し、スクリプトまたはコマンドラインでそれらを統合する小さなツールを調査するのはあなた次第です。

このシリーズの最後の記事では、ダイアログに集中します。 スクリプトに双方向性を追加するためのGUI(実際にはTUI)を作成するためのプログラム。


Linux
  1. Bashスクリプト(I)

  2. BashスクリプトでのLinuxBasenameコマンドの使用

  3. bash エクスポート コマンド

  1. Bashトラップコマンドの説明

  2. Bash待機コマンド

  3. Bash読み取りコマンド

  1. Bash:ファイルに書き込む

  2. Linuxテールコマンド

  3. Linuxタッチコマンド