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

Bashスクリプトによる自動化の概要

Linuxコンピューターを最も緊密に実行および管理しているシステム管理者は、より効率的に作業するのに役立つツールに直接アクセスできます。これらのツールを最大限に活用して生活を楽にするために、このシリーズの記事では、Bashシェルスクリプトの形式で自動化を使用する方法について説明します。対象:

  • Bashシェルスクリプトによる自動化の利点
  • CやC++などのコンパイル型言語よりもシェルスクリプトを使用する方がシステム管理者に適している理由
  • 新しいスクリプトの一連の要件を作成する
  • コマンドラインインターフェイス(CLI)プログラムからの単純なBashシェルスクリプトの作成
  • スクリプトを実行するユーザーID(UID)を使用してセキュリティを強化する
  • 論理比較ツールを使用して、コマンドラインプログラムとスクリプトの実行フロー制御を提供する
  • コマンドラインオプションを使用してスクリプト機能を制御する
  • スクリプト内の1つ以上の場所から呼び出すことができるBash関数の作成
  • コードをオープンソースとしてライセンスする理由と方法
  • 簡単なテスト計画の作成と実装

以前、Bashコマンドと構文、およびコマンドラインでのBashプログラムの作成に関する一連の記事を書きました。これは、この記事の最後にある参照セクションにあります。しかし、この一連の4つの記事は、Bashコマンドと構文に関するものであると同時に、スクリプトの作成(および私が役立つと思ういくつかの手法)に関するものでもあります。

シェルスクリプトを使用する理由

システム管理者のためのLinux哲学の第9章 、私は書きます:

「システム管理者は、既存の問題を解決する方法と将来の問題を回避する方法について考えるとき、最も生産的です。Linuxコンピュータを監視して、それらの将来の問題を予測し、予見する手がかりを見つける方法について考えます。彼らの]仕事はより効率的です。毎日または年に1回実行する必要のあるすべてのタスクを自動化する方法を考えています。

「システム管理者は、非生産的であるように見えながら、考案したソリューションを自動化するシェルプログラムを作成するときに、次に生産性が高くなります。自動化が進むほど、実際の問題が発生したときに修正し、その方法を検討するために利用できる時間が増えます。すでに持っている以上に自動化するためです。」

この最初の記事では、シェルスクリプトがシステム管理者にとって重要なツールである理由と、非常に単純なBashスクリプトを作成するための基本について説明します。

自動化する理由

コマンドラインで長くて複雑なタスクを実行し、「これでよかった。もう心配する必要はない」と思ったことはありませんか。私は持っています—頻繁に。私は最終的に、コンピューターで行う必要のあるほとんどすべてのこと(私のものであれ、雇用主やコンサルティング顧客のものであれ)は、将来、もう一度行う必要があることを理解しました。

もちろん、私はいつも自分がどのように仕事をしたかを覚えていると思います。しかし、多くの場合、次回は私がこれまでに持っていることを忘れてしまうほど、未来に十分遠いです。 やった、ましてや方法 それをするために。私はいくつかのタスクに必要な手順を紙に書き始め、「なんてバカだ!」と思いました。それで、私はそれらの落書きを私のコンピューター上の単純なメモ帳アプリケーションに転送しました。ある日まで、私は再び「私はなんて愚かだ!」と思いました。このデータを自分のコンピューターに保存する場合は、シェルスクリプトを作成して、 / usr / local / binなどの標準の場所に保存することもできます。 または〜/ bin 、シェルプログラムの名前を入力するだけで、以前は手動で行っていたすべてのタスクを実行できます。

私にとって、自動化とは、タスクを再度実行するために、タスクの実行方法の詳細を覚えたり、再作成したりする必要がないことも意味します。物事のやり方を覚えるには時間がかかり、すべてのコマンドを入力するのに時間がかかります。これは、多数の長いコマンドを入力する必要があるタスクにとって、かなりの時間の浪費になる可能性があります。シェルスクリプトを作成してタスクを自動化すると、日常的なタスクを実行するために必要な入力が減ります。

シェルスクリプト

シェルプログラム(スクリプトとも呼ばれます)を作成することは、私の時間を活用するための最良の戦略です。シェルプログラムを作成したら、必要な回数だけ再実行できます。また、シェルスクリプトを更新して、Linuxのあるリリースから次のリリースへの変更を補正したり、新しいハードウェアとソフトウェアをインストールしたり、スクリプトで実行したいことや必要なことを変更したり、新しい機能を追加したり、不要になった機能を削除したりすることもできます。スクリプトのそれほど珍しくないバグを修正しました。これらの種類の変更は、あらゆる種類のコードのメンテナンスサイクルの一部にすぎません。

シェルコマンドを入力して実行することにより、ターミナルセッションでキーボードを介して実行されるすべてのタスクは、自動化でき、自動化する必要があります。システム管理者は、実行するように求められたすべてのことを自動化するか、実行する必要があると判断する必要があります。多くの場合、事前に自動化を行うことで、初めて時間を節約できます。

1つのBashスクリプトには、数個のコマンドから数千個のコマンドまで、どこにでも含めることができます。 1つまたは2つのコマンドだけでBashスクリプトを作成し、2,700行を超えるスクリプトを作成しましたが、その半分以上がコメントです。

はじめに

シェルスクリプトの簡単な例とその作成方法を次に示します。 Bashコマンドラインプログラミングに関する以前のシリーズでは、これまでに読んだプログラミングに関するすべての本の例「Helloworld」を使用しました。コマンドラインから見ると、次のようになります。

[student@testvm1 ~]$ echo "Hello world"
Hello world

定義上、プログラムまたはシェルスクリプトは、コンピューターが実行する一連の命令です。しかし、特にプログラムが長くて複雑な場合は、毎回コマンドラインに入力するのは非常に面倒です。単一のコマンドで実行できるファイルにそれらを保存すると、時間を節約し、エラーが忍び寄る可能性を減らすことができます。

テストシステムまたは仮想マシン(VM)でroot以外のユーザーとして次の例を試すことをお勧めします。例は無害ですが、間違いは起こります。安全であることは常に賢明です。

最初のタスクは、プログラムを含むファイルを作成することです。 タッチを使用する 空のファイルを作成するコマンド、こんにちは 、実行可能にします:

[student@testvm1 ~]$ touch hello
[student@testvm1 ~]$ chmod 774 hello

次に、お気に入りのエディタを使用して、ファイルに次の行を追加します。

echo "Hello world"

ファイルを保存し、コマンドラインから実行します。別のシェルセッションを使用して、このシリーズのスクリプトを実行できます。

[student@testvm1 ~]$ ./hello 
Hello world!

これは、これまでに作成した中で最も単純なBashプログラムであり、ファイル内の1つのステートメントです。この演習では、この単純なBashステートメントを中心に完全なシェルスクリプトを作成します。プログラムの機能はこの目的には関係ありません。この単純なステートメントを使用すると、機能目的のロジックを気にすることなく、プログラム構造(他のプログラムのテンプレート)を構築できます。非常に簡単な方法で基本的なプログラム構造とテンプレートの作成に集中でき、複雑な関数型プログラムではなく、テンプレート自体を作成してテストできます。

シバン

スクリプトで使用されるコマンドと互換性のあるBashまたはシェルを使用している限り、単一のステートメントは正常に機能します。スクリプトでシェルが指定されていない場合、スクリプトコマンドの実行にはデフォルトのシェルが使用されます。

次のタスクは、別のシェルがデフォルトであっても、スクリプトがBashシェルを使用して実行されるようにすることです。これは、シバンラインで実現されます。シバンは#!を説明するオタクな方法です スクリプトの実行時に使用するシェルを明示的に指定する文字。この場合、それはBashですが、他のシェルでもかまいません。指定されたシェルがインストールされていない場合、スクリプトは実行されません。

スクリプトの最初の行としてシバン行を追加すると、次のようになります。

#!/usr/bin/bash
echo "Hello world!"

スクリプトを再度実行します。結果に違いは見られないはずです。他のシェル(ksh、csh、tcsh、zshなど)がインストールされている場合は、シェルを起動してスクリプトを再実行します。

スクリプトとコンパイル済みプログラム

自動化するプログラムを作成する場合、つまりすべての場合、システム管理者は常にシェルスクリプトを使用する必要があります。シェルスクリプトはASCIIテキスト形式で保存されるため、コンピュータと同じように簡単に人間が表示および変更できます。シェルプログラムを調べて、それが何をするのか、構文やロジックに明らかなエラーがあるかどうかを正確に確認できます。これは、オープンであることの意味の強力な例です。 。

一部の開発者は、シェルスクリプトを「真の」プログラミングではないと考えていることを知っています。シェルスクリプトとそれを作成する人々のこの限界化は、実行可能コードを生成するためにソースコードからコンパイルする必要がある唯一の「真の」プログラミング言語であるという考えに基づいているようです。経験から、これは断固として真実ではないことがわかります。

私は、BASIC、C、C ++、Pascal、Perl、Tcl / Expect、REXX(およびObject REXXを含むそのバリエーションの一部)、多くのシェル言語(Korn、csh、Bashを含む)、さらにはいくつかのアセンブリを含む多くの言語を使用しました。言語。これまでに考案されたすべてのコンピューター言語には、人間がコンピューターに何をすべきかを指示できるようにするという1つの目的がありました。プログラムを作成するときは、選択した言語に関係なく、特定のタスクを特定の順序で実行するようにコンピューターに指示します。

スクリプトは、コンパイルされた言語よりもはるかに迅速に記述およびテストできます。プログラムは通常、状況や先のとがった上司によって課せられる時間の制約を満たすために迅速に作成する必要があります。システム管理者が作成するほとんどのスクリプトは、問題を修正するため、問題の余波をクリーンアップするため、またはコンパイルされたプログラムを作成してテストする前に動作可能でなければならないプログラムを提供するためのものです。

プログラムを作成するには、シェルプログラミングが必要です。これにより、顧客があなたであろうと他の誰かであろうと、顧客のニーズに迅速に対応できるようになります。コードのロジックやバグに問題がある場合は、ほとんどすぐに修正して再テストできます。元の一連の要件に欠陥があるか不完全な場合、新しい要件を満たすためにシェルスクリプトを非常に迅速に変更できます。一般に、sysadminのジョブでの開発速度の必要性は、プログラムを可能な限り高速に実行する必要性、またはRAMなどのシステムリソースの使用を可能な限り少なくする必要性を無効にします。

システム管理者が行うほとんどのことは、実行するよりも実行方法を理解するのに時間がかかります。したがって、実行するすべてのことに対してシェルスクリプトを作成することは逆効果に思えるかもしれません。スクリプトを記述して、再現性のある結果を生成し、必要な回数だけ使用できるツールにするには、時間がかかります。タスクの実行方法を(もう一度)理解しなくてもスクリプトを実行できるたびに、時間の節約になります。

最終的な考え

この記事では、シェルスクリプトの作成についてはそれほど詳しくは説明していませんが、非常に小さなスクリプトを作成しました。また、シェルスクリプトを作成する理由と、シェルスクリプトが(コンパイルされたプログラムではなく)システム管理者にとって最も効率的なオプションである理由についても説明しました。

次の記事では、他のBashスクリプトの開始点として使用できるBashスクリプトテンプレートの作成を開始します。テンプレートには、最終的に、ヘルプ機能、GNUライセンスステートメント、いくつかの単純な関数、これらのオプションを処理するためのいくつかのロジック、およびこのテンプレートに基づくスクリプトに必要となる可能性のある他のロジックが含まれます。

リソース

  • Bashでプログラミングする方法:構文とツール
  • Bashでプログラミングする方法:論理演算子とシェル拡張
  • Bashでプログラミングする方法:ループ

このシリーズの記事の一部は、David Bothの3部構成のLinux自習コース、Linuxの使用と管理-ZerotoSysAdminの第2巻第10章に基づいています。


  1. 6 つの実用的な例を含む Bash シェル関数のチュートリアル

    Bash シェル関数は、グループに単一の名前を使用して、後で実行するために複数の UNIX / Linux コマンドをグループ化する方法です。 . Bash シェル関数は、通常の Unix コマンドと同じように実行できます。シェル関数は、それらを解釈するための新しいプロセスを作成することなく、現在のシェル コンテキストで実行されます。bash エイリアスと関数の両方を使用すると、より長い、またはより複雑なコマンドのショートカットを定義できます。ただし、エイリアスは、このチュートリアルで説明されているように、これらの関数が許可する制御フロー、引数、およびその他の巧妙なものを許可しません。 この

  2. 5 つの実用的な例を含む Bash スクリプト入門チュートリアル

    進行中の Unix Sed および Unix Awk シリーズと同様に、Bash スクリプトに関するいくつかの記事を投稿します。実用的な例ですべての bash スクリプト テクニックをカバーします。 シェルは、ユーザー コマンドを解釈するプログラムです。コマンドは、ユーザーが直接入力するか、シェル スクリプトと呼ばれるファイルから読み取るかのいずれかです。ユーザーからの入力を直接読み取る場合、シェルは対話型シェルとして呼び出されます。 シェルは、ファイルからコマンドを読み取って実行するときに、非対話型シェルとして呼び出されます。この場合、シェルはスクリプト ファイルの各行を上から下に読み取