BashはBourne-again Shellの略で、GNU プロジェクトのシェルです。その名前は、歴史的な Unixシェルである Bourne シェルの名前をもじったものです。Bourne again / Born again は、 「再び生まれ変わる」または「生まれ変わる」を意味します。後者に基づいて、特にKorn シェルと C シェルから多くの改良が加えられています。 Bash は、General Public License (GPL) に基づいてリリースされたフリー ソフトウェアです。これは、多くの無料Unix 、特に GNU/Linux システムのデフォルトのインタープリタです。これはMac OS Xのデフォルト シェルでもあり、 CygwinプロジェクトによってWindowsに移植されました。

歴史
オリジナルの著者は フリー ソフトウェア財団のブライアン フォックスで、後にチェット レイミーによって中継されました。オリジナルのボーン シェルはSteve Bourne によって書かれました。

インタラクティブな操作
Bash は readline ライブラリを使用します。これにより、C シェルと同様に、TAB キーを押すとコマンドとファイルの名前が自動的に補完され、作業が大幅に高速化されます。 UP キーと DOWN キーを使用すると、コマンド履歴を簡単に移動できます。
コマンド言語
したがって、行の最初の単語は、インタープリタによってコマンド名と見なされます。ただし、いくつかの種類があり、優先順位も異なります。優先順位の降順に:
- エイリアス: 別の単語 (グループ) の同義語として定義される単語です。この場合、インタープリタは単語を同等の単語に置き換えることから始めます。
- 内部コマンド: これはインタープリタ自体で定義されているコマンドであり、別個のプログラムの対象ではありません。たとえば、「cd」(ディレクトリ変更) または「set」コマンドは内部シェルコマンドです。
- 外部コマンド、つまりマシンのディスクに保存されているプログラム (またはコマンドファイル、一般にスクリプトと呼ばれます)。たとえば、
/bin/ls指定されたディレクトリに含まれるファイルを一覧表示するコマンドです。
各注文は次の制約を尊重します。
- 行の最初の単語はコマンドの名前として解釈され、他の単語はパラメータまたはオプションになります。
- 各単語は 1 つ以上の区切り文字で区切られます。デフォルトでは、これらの文字はスペースとタブです (IFS: 内部フィールド区切り変数を使用して変更可能)。
- コマンドの終わりには「;」が付けられます。 (複数のコマンドを同じ行に配置したい場合)、または改行によって。
$パス
外部コマンドの場合、シェルはプログラムを実行する前にプログラムを見つける必要があります。ファイル システム全体をコマンドごとに徹底的に検索すると、時間がかかりすぎて、実際にはシステムが使用できなくなります。コマンドを実行するプログラムを検索するときに実際に参照されるのは、少数のディレクトリのみです。これらのディレクトリは、「$PATH」という環境変数で定義されます。 PATH にリストされているディレクトリのいずれかでコマンドが見つからない場合、実行すると「コマンドが見つかりません」のようなエラーメッセージが表示されます。
Windows で行われることとは異なり、セキュリティ上の理由から、UNIX シェル (したがって bash) は暗黙的に現在のディレクトリを PATH に含めませんが、明示的にそこに配置することができます。
セッション
セッションは、 exitコマンドまたは「Ctrl D」(UNIX ではファイルの終わりマーク: ユーザーがインタープリタ読み取りストリームを閉じる) を使用して閉じられます。
構文
各注文は次のように関連付けられています
- 標準入力 ( stdin )
- 標準出力 ( stdout )
- エラー出力 ( stderr )
オプションで、追加のファイル記述子をコマンドに関連付けることができます。
シェルのメタキャラクター
メタキャラクターは、文字通りの意味を超える意味を持つ文字です[ 1 ] 。 Bash の正規表現レベルの例をいくつか示します。
- 「*」: 0 回、1 回以上繰り返された任意の文字と一致します。
- 「?」 : は任意の文字と同等です。
その他、Bash コマンド レベルでは次のようになります。
- 「`」:これらの文字の間に含まれる文字列をコマンドとして解釈します。例:
for file in `ls`; - 「\」: メタキャラクターの特別な解釈を防ぎます。
- “‘”: これらの 2 つの文字の間に含まれるすべての文字は、単純なテキストとして解釈されます。
プロセス管理[ 2 ]
| 注文 | 運営 | 説明 |
|---|---|---|
もっている & | コマンド A を起動する新しいプロセスを作成します (コンソールに依存しません)。 | |
A&&B | 論理積 ( && ) | A が成功したらB を実行します。 |
|| B | または (||) | Aが失敗した場合にのみB を実行します。 |
A「B」 | 動的パラメータ | AはBの実行結果を使用します |
オーストラリアドル(B) |

フロー管理
大きく分けて次の 3 つの流れがあります。
- 標準入力(エントリ 0);
- 標準出力(入力 1)。
- 標準エラー出力 (入力 2)
使用方法:
| 注文 | 運営 | 説明 |
|---|---|---|
> ファイルへ | 終了 ( > ) | コマンド A を実行し、結果をファイルに書き込みます |
A 2> ファイル | 終了 ( 2> ) | コマンド A を実行し、エラーをファイルに書き込みます |
A > ファイル 2>&1 | 出力 ( >および2>&1 ) | コマンド A を実行し、結果とエラーをファイルに書き込みます |
< ファイル | 入力 ( < ) | コマンド A を実行し、ファイルをA のエントリとして提供します。 |
あ | B | 出力、入力( | ) | A を実行し、その結果を入力として B に送信します |
入力と 2 つの出力のリダイレクト
- > を使用してコマンドの標準出力 (stdout) をリダイレクトします。
- 2> 「エラー」出力 (stderr) をリダイレクトするため
一般的に言えば、 n> はn 番目のファイル記述子のリダイレクトを許可します。
- &>標準出力とエラー出力を同時にリダイレクトするには:
シェル変数
変数は、先頭に $ 記号を付けて参照します。例: echo $HOME
いくつかの環境変数: USER PID HOME PATH SHELL
コマンドの置換
コマンドラインで、コマンドをバッククォート「コマンド名」で囲むか、$() $(コマンド名) を使用して、引数としてのコマンドをその結果 (標準出力) に置き換えます。
表現
バックスラッシュのエスケープ文字 (「\」)
行末のバックスラッシュ
行末のバックスラッシュは、コマンドが次の行に続くことを示します。この機能は、大量の注文を読みやすくするために特に役立ちます。
C の特殊文字の 1 つを形成するバックスラッシュ
$'\n'に似た形式の文字列は、bash によって特定の方法で解釈されます。これらは C ANSI の規則に従って変換されます。例 :
echo $'\a' # ビープ音が鳴ります。
リストは次のとおりです。
| 排気 バックスラッシュで | bashインタプリタによる変換 |
|---|---|
| \もっている | ビープ音 |
| \b | 後部間隔 |
| \e | 排気 |
| \f | ページ送り (この文字の英語名はform feedです) [ 3 ] |
| \n | 改行 |
| \r | キャリッジリターン |
| \t | 水平タブ文字 |
| \v | 垂直タブ文字 |
| \\ | バックスラッシュ |
| \' | アポストロフィ (この文字の英語名はquoteです) |
| \nnn | 8 進数値が nnn である8 ビット文字 |
| \xHH | 16 進値が HH である 8 ビット文字 |
| \cx | Control-X 文字 |
「ASCII」を参照
bash メタ文字の 1 つの前にバックスラッシュ
メタ文字、特に「*」 (スター) は bash インタープリタによって解釈されます (ほとんどの場合、可能なファイルに置き換えられます)。これは場合によっては面倒です ( find [ 4 ]コマンド、sed、.. .etc)。例 :
cd /etc;find 。 -名前 r* エラーメッセージは次のようになります 検索: パスは式の前にある必要があります
解決策の 1 つは、「*」文字の前にバックスラッシュを使用することです。例 :
cd /etc;find 。 -名前 r\*
気づいた
- 別の解決策は、引用符を使用することです。例
cd /etc;find 。 -名前「r*」
可能な起動スクリプトとログアウト スクリプト
ログイン時に実行されるスクリプト
- 全ユーザー共通
- /etc/プロファイル
- 各ユーザーに固有の
- .bash_profile
- .bash_login
- 。プロフィール
ログアウトスクリプト
- .bash_logout
ログイン スクリプト以外の対話型シェルのスクリプト作成:
- .bashrc
