
エントリー
ツールの使いやすさは、特定の問題の解決にどれだけ役立つかということにあります。 このツールをニーズに合わせてカスタマイズできることも重要です。 楽しいボーナスは、ツールに新しい機能を拡張して追加できるという事実です。
最も興味深い、興味深いトピックに
bash
ました-これらは
bash
スクリプトです。 ターミナルを起動すると、特別なシェルプログラムがその内部で動作します-
shell
(英語)-コマンドインタープリター。 シェルは、キーボードから入力したすべてのコマンドを理解して処理します。 また、エラーメッセージを表示し、コマンドとその構文の正確さを監視します。 このようなコマンドの例としては、ディレクトリの変更、新しいディレクトリの作成、テキストファイルの追加、テキストファイルの編集、変更の保存などがあります 。
シェルプログラムはたくさんあります。 最初に成功した実装の1つは
sh
と呼ばれます。 1977年にStephen Bourneによって開発されました( wiki )。
OS *nix
実行しているコンピューターで作業している場合の99%の場合、コマンドを処理するデフォルトのシェルはbashです。 もちろん、
zsh
などのシェルはまだありますが、これはまったく別の話です。
重要なポイント。 この記事は、bashスクリプトの完全なガイドではありません。 主な目標は、bashでのプログラミングの基本を検討し、例を示し、先に進むのに十分な基本知識を読者に提供することです。 記事の最後に役立つリンクがあり、このトピックをさらに詳しく調べることができます。
基本
最初のセクションでは、基本について説明します。 スクリプトの開始位置を検討してください。 変数の定義方法およびこれらの変数の値の変更方法。 また、スクリプトに引数を渡し、スクリプト内でこれらの引数を処理する方法も理解します。 次のセクションは分岐です。 そして最後の、しかしそれほど重要でないセクションはサイクルです。
bashスクリプトは次の行で開始する必要があります。
#!/bin/bash
したがって、スクリプトが実行可能な場合に呼び出すプログラムをインタープリターに伝えます。
コードの移植性を改善するには、最初の行のこのバージョンを指定する必要があります。
#!/usr/bin/env bash
bash
へのパスが異なるシステムで同じになることは保証されません。
env
を指定することで、このような驚きから身を守ります。 繰り返しますが、これは、異なるシステム、コンピューターなどでスクリプトを使用する予定がある場合です。 これが不要な場合は、最初のオプションが最適です。 すべての例で、最初のオプションが使用されます。
デフォルトでは、ユーザーが作成したすべてのファイルは実行可能ではありません。 次のコマンドを使用して、特定のファイルにこのパラメーターを明示的に指定する必要があります。
chmod +x <filename>
次のコマンドを使用して、このパラメーターなしでスクリプトを実行できます。
bash <filename>
変数
変数は、メモリ内の名前付き領域です。 つまり、変数には名前があり、特定のコンピューターのメモリの場所を参照します。 通常、変数は何らかの情報を保存するために使用されます。 変数は、名前と値の2つの部分で構成されます。
変数名:
- 文字、数字、アンダースコア(
_
) - 数字で始めることはできません
変数値:
- 数字、文字列(スペースがある場合は引用符で囲む)、個々の文字
変数の作成(上書き):
path="$HOME"
等号の前後にスペースを入れないでください。
変数の読み取り:
"$path" "${path}"
ほとんどの場合、両方のオプションは同じように機能します。 場合によっては、あいまいさが生じると、この形式の記述のみが正しく機能します:
"${path}"
スクリプトに引数を渡す:
./script.sh arg1 arg2 arg3 … argN
スクリプト内の引数の処理:
"$1" # "$2" # "$0" # "$#" # "$*" # () "$@" # $*, (), # ..
さて、最初のスクリプトを書く時が来ました。 当然のことながら、スクリプトはユーザーの画面に「Hello、world!」という文字列を表示します。
そのように、bashで「Hello、world!」の例を実装できます。 リポジトリにあるすべての例を思い出します 。 別の例を見てみましょう。 今回は、変数と、ユーザーがスクリプトに渡す引数を操作します。
通常、bashで記述されたすべてのプログラムの拡張子は
.sh
であることに注意してください。
枝
基本と変数は少し整理されました。 では、ブランチに移りましょう。 次の構成は、bashでブランチを操作するために使用できます。
-
if
-
if/else
-
if/elif/else
-
case/in/esac
最初の3つのオプションは似ており、後続の各構成は前の構成を補完します。 最も単純なオプションを検討してください。
各行の終わりにセミコロンがないことに注意してください。 1行に条件を(だけでなく)書き込むことができます。その場合、セミコロンが必要です。
ブランチを操作するときは、行が空かどうか、番号がゼロかどうか、ファイルを操作しているか、これがディレクトリかどうかを何らかの方法で確認する必要があります。 このようなタスクの場合、bashには独自の構文があります。 文字列、数字、ファイル、論理の4つのカテゴリに分けました。 それらを見てみましょう。
条件(行):
条件(数値/行):
条件(ファイル):
条件(論理):
if/else
オプションはスキップします。 しかし
if/elif/else
、例を検討する
if/elif/else
提案します。
スクリプトは、入力で1つの引数(ファイル名またはディレクトリ名)を受け取ることを想定しています。 次のステップは、これがファイルかディレクトリかを確認することです。 はいの場合、削除します。 渡された引数がファイルでもディレクトリでもない場合、削除できないというメッセージをユーザーに表示します。
分岐の最後のバリアントを考慮することは残ります-これは
case/in/esac
です。 JavaScriptに例えると、これは実装オプション
switch/case
です。 この構造も例で考えてみましょう。
このスクリプトは、1つと2つの2つの数値引数を受け取ることを想定しています。 そして、どの引数が最初に来るかに応じて、ファイルまたはディレクトリが作成されます。 ユーザーが渡した引数の数のチェックもあります。 引数の数は2より少なくてはなりません。 ユーザーが誤った引数を指定した場合、それについてのメッセージを表示します。 これはデフォルト値が原因です。
サイクル
次のセクションでは、ループの操作について説明します。 bashの兵器庫でのループの構成には、
for/in
および
while
ような構造があります。
構文の
for/in
見てみましょう。
i
は、配列要素が渡される変数の名前です。
array
は配列そのものです。 後続の各反復で、
i
は配列から次の値を取得します。 例を考えてみましょう:
値のリストがあります:
1 2 3 4 5
。 すべての値を実行するサイクルを開始します。
file_name
変数を作成します。 次に、同じ名前のファイルが存在するかどうかを確認します。 ファイルがない場合は作成し、ある場合は作成手順をスキップします。
単語
continue
気付いたかもしれません-これはキーワードです。 反復をスキップして、さらに作業を続けることができます。
break
キーワードもあります-スクリプトの実行を中断します。 これらのキーワードは
if/else
コンテキストでのみ使用され
if/else
。
ループを操作するために検討する次の構成は、
while
です。
すぐに例を検討することをお勧めします。
この例では、
read
キーワードを持つ2つの行があり
read
。 これらの行がどのように機能するかをさらに詳しく考えてみましょう。 つまり、行番号12と行番号8。 行番号12から始めましょう。
$again
変数が
"yes"
に設定されている限り、プログラムはユーザー名を要求し、画面に表示します。 その後、スクリプトは続行するかどうかを尋ねます。 そして、ユーザーが
yes
代わりに他の行を
Enter
か、単に
Enter
押すまで続きます。 しかし、さらに興味深いのは、行番号8のコードです。 以前に宣言されていない変数
$name
があります。 この変数は動的に作成され、その値が読み取られます。
便利なリンク
- bashの基本
- バッシュハンドブック
- 落とし穴バッシュ
- Advanced Bash-Scripting Guide [en] (リンクについてはKonkaseに感謝します )
- 高度なBashスクリプトガイド (リンクをありがとう)
- Googleシェルスタイルガイド ( leoismyname 、リンクをありがとう)
- #!/ Usr / bin / envの意味と利点は何ですか? ( Borzはリンクをありがとう)
- コマンドラインを学ぶ
- コマンドラインクラッシュコース
- 英語のLinuxコマンドライン
- 基本的なUnixコマンド
結論の代わりに
この肯定的なメモで、bashの紹介を終了します。 この情報は、単純なスクリプトを実装するだけでなく、日常のタスクを自動化するのに十分です。
今後の展望では、次の記事では、bashスクリプトを使用してルーチンタスクを自動化する方法の理論が減り、さらに多くの例が出てくると言います。 お楽しみに。
以上です。 ご清聴ありがとうございました。 最後まで読んでくれた人、ありがとう。 次の記事でお会いしましょう。
UPD。 コメントの議論に基づいて、記事のテキストが更新されました。 議論に積極的に参加してくれたすべての人に感謝します。 あなたは記事をさらに良くしました。 そして単なる記事ではありません。