「シェル」と「バッシュ」の違いは何ですか?これらの用語の意味は何ですか?
私の知る限り、違いはありません。しかし、「シェル」に関する本や「バッシュ」に関する他の本を見てきました。
だから、Mac OS Xのターミナルで作業し、bashスクリプトを書きたい場合、どの種類の本を選べばいいのか疑問に思う。
「シェル」と「バッシュ」の違いは何ですか?これらの用語の意味は何ですか?
私の知る限り、違いはありません。しかし、「シェル」に関する本や「バッシュ」に関する他の本を見てきました。
だから、Mac OS Xのターミナルで作業し、bashスクリプトを書きたい場合、どの種類の本を選べばいいのか疑問に思う。
回答:
「シェル」は、オペレーティングシステムへのインターフェイスを提供するソフトウェアです。たとえば、explorer.exeはWindowsのデフォルトのシェルであり(代替手段は存在します)、OS X Finderではほぼ同じ機能を提供します。Linux / * nixでは、シェルはデスクトップ環境の一部(GnomeやKDEなど)であるか、その上にある別のソフトウェアコンポーネント(UnityやCinnamonなど)である可能性があります。
上記の例はすべて、ウィンドウ、メニュー、アイコンなどの要素を組み合わせて使用し、マウスカーソルを使用して操作できるグラフィカルユーザーインターフェイス(GUI)を提供するグラフィカルシェルです。ただし、Bashのようなソフトウェアやスクリプトの記述のコンテキストでは、「シェル」は通常、コマンドラインインタプリタを意味するものと見なされます。
Bashはコマンドラインシェルの特定の例であり、おそらく最もよく知られているシェルの1つであり、多くのLinuxディストリビューションおよびOS Xのデフォルトです。Bourneシェルの代替として設計されました(Bashは「Bourne again shell」)、最初のUnixシェルの 1つ。
Windowsのコマンドラインシェルの例には、cmd.exe(別名コマンドプロンプト)およびPowerShellが含まれます。
Bashはいくつかのシェルの1つです。
UnixまたはOSXやLinuxなどのUnixライクなシステムのシェルは、オペレーティングシステムへのコマンドラインインターフェイスを提供するアプリケーションプログラムであり、コマンドを入力して実行することができます。さまざまなシェルを選択できますが、それらはすべて、ファイル名のワイルドカード、パイピング、ヒアドキュメント、コマンド置換、変数、および条件テストと反復用の制御構造を提供します。
元のUnixシェルは、Bell LabsのStephen Bourneによって書かれたBourne shellでした。その後、BerkeleyのBill Joyによって書かれたCシェルが登場し、tcshとして更新されました。他のシェルには、Kornシェル(ksh)のデビッド・コーンによって書かれ、また、ベル研究所の、およびbashの shのための無料の代替としてGNUプロジェクトのためにブライアン・フォックスによって書かれた、「ボーンは再びシェル」、。
今日、bashはおそらく最も人気のあるUnixシェルですが、多くの人々(私も含めて)は、より良い構文に基づいて(私たちのように思われる)Cシェルを好んでいます。基本的に、それは好みの問題ですので、始めるために私がリンクしたウィキペディアの記事を読むことをお勧めします。
「シェル」という用語には、適切な名前が付けられています。これは文字通りO / Sを囲むシェルであり、ユーザーがコンピューターと対話できるようにします。当初は、グラフィカルユーザーインターフェイスはほとんどありませんでした(ウィンドウはありません:()。すべてはコマンドラインで行われました。しかし、コマンドラインでさえも生きるための場所が必要でした。 。
簡単に言えば、コマンドラインを有効にするには、呼び出すことができる命令が必要でした。そのため、コマンドラインを使用するために、シェル内でプログラムを実行するようにしました。これらのプログラムは、独自のパッケージに緊密にグループ化されており、一緒に動作することを意図しています。「ls」や「grep」、「ps」、「sed」などのプログラムが含まれます。また、「>」や「<」やパイプ(「|」)などのファイルリダイレクトコマンドも含まれます。さらに重要なことには、条件付き演算(if、then、else、forループ、whileループ、ステートメントの実行時に返されるステータスを確認する方法(「ls」を実行した場合、何かが見つかりましたか?)そのような)。これらは、より複雑なコマンドライン(シェル)スクリプトの基礎であり、
誰かが「Bash Shell」という用語を使用するとき、O / Sシェルで実行される「Bash」と呼ばれるコマンドラインインタープリターについて話します。「Bash Shell Interpreter」の略であると考えることができます。Bourneのような他のインタープリターがあります(Bashは「新しく改良されたBourne Shellであり、Bourne Again Shellの略です」)。Cシェル、Kシェル(複雑なシェルスクリプトを作成する多くの人に好まれている)、およびその他のGNUバリアントもあります。長年にわたって、シェルとして使用している特定のコマンドラインインタープリターを参照するのが習慣になりました。一方が他方なしでは使用できないためです。しかし、現実には、それらは異なっています。
実際のシェルとしてではなく、コマンドラインインタープリターとして適切に知られている理由については、シェル内に存在し、プログラムで実行されているかのようにすべてのコマンドを解釈するためです。そして、シェルは、正しい基準を満たしている限り、どのインタープリターで実行するかを気にしません。
そして、彼らが通訳と呼ばれる理由については、彼らが本当に通訳だからです。明示的にスクリプトを実行していない場合でも(スクリプトは実際に作成したコマンドの単なるテキストファイルであり、同じコマンドを繰り返し入力せずに繰り返し実行できるようになっています)。たとえば、謙虚な「ls」コマンドを使用します。実行すると、ファイルのリストが返されます。しかし、それがどのように実行されるかはあなたの質問にとってより重要です:実際にコマンドラインインタープリターのコンテキスト内で実行されます。つまり、より大きなプログラムの一部のステートメントであるかのように実行されます。実際にはシェルスクリプトファイルに存在せずに、シェルスクリプトスクリプトファイルに存在するかのように実行されます。匿名のシェルスクリプトファイル。
コマンドラインで実行するものはすべて共通です( 'ls'のような単一のコマンドでも、コマンドとイテレーターと条件ステートメントでいっぱいのスクリプトファイルでも):コマンドラインインタープリターによってすべて処理されます。Bash、C-Shell、K-Shell(AIX btwのデフォルト)です。
意味を確認するには、「テスト」ディレクトリを作成します。
mkdir test
入力して、次のコマンドを実行します
grep hello *
「そのようなファイルやディレクトリがありません」などの何らかの応答が返されます。次にコマンドを入力します
echo $?
($?は、暗号化されたコンピューターの発言で見つけたものを教えてくれます。)「2」という数字が返されるはずです。これは、grepからの戻りコードで、「そのようなファイルやディレクトリはありません」という意味です。次を実行します。
echo hello > hello.txt
grep hello *
echo $?
最初のgrepコマンドから返されたファイル「hello.txt」が表示され、「echo $?」が表示されるはずです。実際に何かを見つけたことを意味する数値「0」を返します。
これらの1回限りのコマンドが実行された場合でも、コマンドラインインタープリターは、それらがより大きなプログラムの一部であるように動作し、戻り値を追跡します。そのため、grepコマンドの最後にある*を忘れると、戻りません。ステートメントが不完全であり、より多くの入力を期待していることがわかっています。結局のところ、コマンドラインで作成して実行するのに完全に合法なループの結果をgrepするように要求することも考えられます。
要するに、シェルはシェルであり、インタープリター(使用するものの名前が何であれ、「Bash」、kシェルなど)は異なります。しかし、多くの場合、それらは互換的に使用されます。これは、任意の瞬間に完全に結び付けられているためです。
シェルは、テキストベースのユーザーインターフェイスです。
Bashはシェルの一種です。