これは、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にリダイレクトされました。
パイプh2>
bashマニュアルから:パイプラインは、制御演算子 |の1つによって分離された1つ以上のコマンドのシーケンスです。 または |& 。
最初のオペレーターは、最初のコマンドの標準出力を2番目のコマンドの標準入力に接続します。たとえば、覚えていない lsコマンドでワイルドカードを使用でき、現在のフォルダーにあるすべてのシェルスクリプトを一覧表示したい lsを実行できます。 grepで出力をフィルタリングします :
Perlの人々にはモットーがあります:«それを行うには複数の方法があります »。個人的には、(ほとんど)どこにでも適用できると思います。
2番目の演算子は、最初のコマンドの標準エラーを2番目のコマンドの標準入力に接続します。たとえば、コマンド trを使用しています (文字を変換します)エラーメッセージのモックに:
また、出力をスペイン語から英語に変更するようにLANGシェル変数を設定しました。
コマンド置換
コマンド置換を使用すると、スクリプト内でコマンドを実行し、そのコマンドの出力を使用できます。例を使用すると、どのように機能するかを理解しやすくなります。コマンドseqは、数列を生成するために使用されます。
たとえば、この出力を使用して、コマンド置換を使用した連続した名前のフォルダーを作成できます。 `コマンド`を使用できます または$(コマンド) 。
この例では、 seq 1 5の出力を割り当てます。 変数iに 、forループで使用します。
お楽しみに
これまでのところ、私たちはコンピューターに(多くの)仕事をさせるのに十分です。 1つのタスクを実行するが、それを非常にうまく実行し、スクリプトまたはコマンドラインでそれらを統合する小さなツールを調査するのはあなた次第です。
このシリーズの最後の記事では、ダイアログに集中します。 スクリプトに双方向性を追加するためのGUI(実際にはTUI)を作成するためのプログラム。