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

システム管理者向けのBashスクリプトの使用を開始する

Bashシェルは間違いなく唯一のシェルではありませんが、最も強力なシェルの1つです。これにより、システム上で実行するコマンドの単純な「ランドリーリスト」を超える本格的なアプリケーションを開発する必要があるシステム管理者に人気があります。他のシェルには多くの優れた用途がありますが(たとえば、Gitフックの場合はデフォルトでTcshになります)、本格的なスクリプト作成にはBashが簡単に選択できます。その理由は、次のとおりです。

関数

Bashスクリプトで関数を作成するには、キーワード functionを使用します :

function foo {
# code here
}

関数は、コードの冗長性を減らすのに役立つため、プログラマーにとって便利です。コードの冗長性が少ないと、必要なメンテナンスの量が減ります。値を変更する必要がある場合、使用するたびにではなく、(関数内で)1回だけ検索する必要があるためです。

Bashのスタック方法

Tcshを除いて、関数はシェルでかなりよくサポートされています。

  • Kornシェル: Bashと同じ構文を使用します
  • Zsh: Bashと同じ構文を使用します
  • 魚: カスタムの関数を使用します 関数を作成および操作するコマンド
  • Tcsh: 場合によっては、 goto を使用して、Tcshの機能の欠如を回避できます。 ステートメントですが、それが最適な選択になることはめったにありません。
リダイレクト

入力と出力のリダイレクトは、プログラミング言語やスクリプト言語ではかなり標準的な機能であり、シェルを使用している場合は本質的に発生します。テキストを入力します。出力を取得します。一部のシェルは他のシェルよりも堅牢であり、ご想像のとおり、Bashは考えられるほぼすべてのオプションを提供します。

基本は単純です。いくつかの>を使用します 出力をリダイレクトする文字といくつかの< 入力をリダイレクトする文字。ただし、特定のタイプの入力と出力にはいくつかの特別な指定があります。たとえば、エラーメッセージは stderrというストリームに送られます 、 2>として指定されています リダイレクトの目的で。たとえば、このコマンドはエラーメッセージを output.logというファイルに送信します :

$ ls /void 2> output.log

Bashのスタック方法

リダイレクトは、シェルと対話するときに非常に便利な機能です。すべての主要なシェルは何らかのリダイレクトをサポートしていますが、すべての機能がすべてのシェルで利用できるわけではありません。

  • Kornシェル: Bashと同じ構文を使用します
  • Zsh: Bashと同じ構文を使用します
  • 魚: 部分的なサポート
  • Tcsh: 部分的なサポート
ソース

シェルでファイルをソースするときは、ファイルをシェル環境にインポートします。ほとんどのシェルはこれを適切に処理しますが、便利ないくつかの追加機能を提供するシェルもあります。

たとえば、ソースを使用する場合 Bashでは、現在のディレクトリで参照しているファイルを検索します。ソースとなるファイルが見つからない場合は、代わりにPATHを検索します。小さなボーナスですが、一般的な機能をドライブの中央の場所に保存し、環境を統合開発環境(IDE)のように扱うことができるため、非常に便利です。関数がローカルで/usr / include に相当する場所にあることがわかっているので、関数がどこに格納されているかを心配する必要はありません。 、したがって、それらを調達するときにどこにいても、Bashはそれらを見つけます。

Bashのスタック方法

Bashは、現在のディレクトリと PATHの両方を検索する唯一のシェルです。 ソースのいずれかを使用する場合 コマンドまたは省略形(およびPOSIX-ly正しい) 表記。

キーバインディング

多くのシェルでは、シェルとの対話方法をカスタマイズできます。もちろん、テキストベースのインターフェイスとの対話は、入力から始まります。 Bashでは、現在のキーマップを表示できます:

$ bind -V | grep keymap

キーマップを変更するには(たとえば、EmacsからViに):

$ bind 'set keymap vi'

Bashの積み重ね方

キーバインディング用の組み込みプリセットを提供しているのはBashとZshだけです。

履歴

Bashには、どのシェルよりも堅牢なコマンド履歴インターフェイスがあります。 履歴のBashバージョン 逆検索、クイックリコール、履歴編集(行番号によるエントリの削除を含む)などが可能です。組み合わされた他のすべてのシェルはBashの履歴インターフェースと一致しますが、(一般的にBashを模倣するZshでさえ)それ自体と一致するものはありません。

履歴操作

歴史 コマンドはあなたの過去と対話する唯一の方法ではありません。 Bashには、シェル履歴内のコマンドを呼び出したり、変更したりできるようにする、豊富な速記法のコレクションがあります。

たとえば、最新のコマンドを再度実行するには(&nbsp; history | tail -n1の出力 、先頭のスペースを使用 、ここでは&nbsp;で指定されています 、 履歴コマンドを履歴から除外するには)、 !!と入力するだけです。 Bashに。:

$ wc -w luarocks.xml
1284 luarocks.xml
$ !!
1284 luarocks.xml

コマンドの一部を別のコマンドに置き換えながら最新のコマンドを実行するには、文字列置換を使用できます。

$ wc -w luarocks.xml
1284 luarocks.xml
$ ^-w^-l
$ wc -l luarocks.xml
214 luarocks.xml

そのようなショートカットはたくさんあり、それらはすべてバッシュマンと情報ページに文書化されています。確かに、これらのトリックの多くは、Bashの操作が非常に反復的でありふれたものであるため、あいまいで、一見ランダムなキーの組み合わせが役立つ上級ユーザーを対象としています。 ZshはBashを効果的に模倣しますが、この種の最大化された効率を提供するシェルは他にありません。

Bashのスタック方法

Bashの履歴コマンドは、他のどのシェルにも匹敵しません(Zshは近づいていますが、行番号で削除する機能など、いくつかのオプションがありません)。

連想配列

ほとんどのシェルは、インデックス付き配列を作成、操作、およびクエリする機能を提供します。平易な英語では、インデックス付き配列は、接頭辞として数字が付いたもののリストです。このリストと割り当てられた番号は、1つの変数にまとめられているので、コード内で簡単に「持ち運ぶ」ことができます。

ただし、Bashには連想配列を作成する機能が含まれており、これらの配列を他の配列と同じように扱います。連想配列を使用すると、番号付きの値だけでなく、キーと値のペアのリストを作成できます。

連想配列の良いところは、キーが任意である可能性があることです。

$ declare -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[login]=`date --utc +%s`

任意のキーをクエリします:

$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192

配列に期待される通常の配列操作のほとんどが利用可能です。

Bashのスタック方法

Bashは、連想配列を完全にサポートする唯一のシェルです(ここでも、Zshは近づいていますが、キーを一覧表示する機能がありません)。

シェルスクリプト用のBashを選択

Bashの便利な機能の一部はPOSIXに準拠していません。理論的には、これは、Bashがないシステムでは期待どおりに実行されないBashスクリプトを記述できることを意味します。その場合、スクリプトは「ポータブル」ではないと言われます。

ただし、実際には、Bashは無料のオープンソースソフトウェアであるため、Linux、BSD、OpenIndiana、Windows、macOSのいずれを実行していても、誰でもBashをインストールできます。 Bashをインストールする場合、ユーザーはBashをデフォルトのシェルとして使用したり、意識的に起動したりする必要はありません。優れたシェルスクリプトは、上部の shebangで使用するシェルを識別するためです。 行(#!/ bin / bash 、たとえば)。

疑わしい場合は、シェルスクリプトの依存関係としてBashをドキュメントに含めて(それが唯一の依存関係であっても)、それがBashスクリプトであり、一般的なシェルスクリプトではないことをユーザーに警告します。

Bashには多くの便利さがあり、ユーザーがBashをインストールしたかどうかという懸念よりもそれらの方が重要であることがわかりました。 Python、Java、またはその他のソフトウェアと同様に、依存関係がある場合があります。 Bashを楽しんでいて、その速記とショートカットが便利だと思ったら、自分で速記しないでください。

システム管理者向けのBashスクリプトに関する電子書籍をダウンロードしてください!


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

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

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

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