bashスクリプトはシェルスクリプトと同じですか?


58

私はUbuntuが初めてです。「シェルスクリプト」、「バッシュスクリプト」という人の声が聞こえます。

同じだろうか?それとも違う?


で便利な答えがあるSOは
氏ペイ

回答:


55

Bash(bash)は、多くの(まだ最も一般的に使用されている)Unixシェルの1つです。Bashは「B ourne A gain SH ell」の略で、元のBourneシェルの置き換え/改良です(sh)。

BashスクリプトはBash専用のスクリプトですが、シェルスクリプトは任意のシェルでのスクリプトです。ただし、実際には、問題のシェルがBashでない限り、「シェルスクリプト」と「bashスクリプト」はしばしば同じ意味で使用されます。

編集:実際には、Ubuntuのデフォルトのスクリプティングシェルはダッシュですが、デフォルトのインタラクティブシェル(ターミナルを引き上げると得られるもの)はBashです。それにも関わらず、2つの用語はまだほとんど互換性があります。


1
ダッシュをデフォルトのスクリプトシェルとして定義するものは何ですか?
wjandrea

1
@wjandrea デフォルトのシステムシェル/bin/sh/bin/dash作成するためのシンボリックリンクであるという事実は、デフォルトのスクリプトシェルではありません。つまり、絶対に使用しなければならない規則は書かれていません。1が使用している場合、あなたのスクリプトが持っているほとんどが複数のUnixライクなOSプラットフォーム上で使用されることを期待する場合には、移植性の理由のために主にPOSIX準拠の、ボーンファミリーシェルとして。/bin/sh/bin/sh/bin/sh
セルギーコロディアズニー

29

前書き

シェルスクリプトとBashスクリプトは同じものではありませんsh。スクリプトを実行するために使用できるシェルなど、他のシェルが存在するためです。実行することを意図しBashBashスクリプトは、スクリプトとしてラベル付けする必要があります。にBash比べて機能が拡張されているためsh、多くのディストリビューションでユーザースクリプトを実行するために最も一般的に使用される用語であるため、この用語はしばしば同じ意味で使用されます。しかし、のような他のシェルがありKorn (ksh)C shell (csh)そしてZ shell (zsh)、私たちはの議論として、ここではそれらの中に入ることはありませんshし、bashUbuntuのに最も関連しています。ここでの IBMの素晴らしい記事は、Linuxでのシェルの進化について詳しく説明し、シェルアーキテクチャとシェルの違いについて詳しく説明しています。

シェルスクリプト

ShStephen Bourneによって開発された元のUnixシェルでした。しかし、DebianのシステムをベースとUbuntuを考慮dashそのようにshシェル(sh実際にシンボリックリンクされていますdash)。DebianおよびUbuntuでは、の速度によりsh、重要なシステムプロシージャや起動時の主要なスクリプトの実行によく使用されます。詳細については、Ubuntu wikiを参照てください。 BashBourne Again SHellの略語であり、後でブライアンフォックスによって開発され、オリジナルを大幅に拡張しましたsh。Foxと他の人の開発はBashGNUプロジェクトの重要な部分でした。詳細については、歴史に関するこのすばらしい議論Bashをご覧ください。

Ubuntuや他のディストリビューションで使用されているように、shとの両方BashPOSIX準拠していることに注意することが重要です。つまり、シェルでのコマンドの実行方法に関する多くの標準に加入しています。これはPOSIX、開発者にとって特に重要であるため、OSで使用されるスクリプトの結果を確実に予測でき、シェルの動作をこれらのパラメーター内に保持できるようにするためです。標準の詳細については、公式ドキュメントを参照してください。

多くの場合、シェルスクリプトは、スクリプト.shとして実行されることを目的bashとしており#!/bin/bash、スクリプトの先頭にサフィックスが付いています。スクリプトの名前がscript.shmy.scriptかは問題ではなく、インタプリタへの呼び出しが/bin/shor かどうかが重要です/bin/bash。シェルスクリプトは、shまたはのいずれかを使用してコマンドラインで呼び出すこともできますbash

ただし、すべてのコマンドがで機能するわけではないため、ほとんどのコマンドがで機能するため、どのインタープリターが呼び出されるかによって結果が異なる場合があることに注意することが重要です。一般に、ほとんどのユーザーは、拡張機能セットを利用できるように、スクリプトに使用したいと思うでしょう。必要に応じてシステムスクリプトを実行できます。bashshshbash/bin/bash/bin/sh

Bash Shellスクリプトのリソース

良い慣行に従って、有用なスクリプトを作成できるアドバイスを提供する有用なリソースをオンラインで見つけるのは難しい場合があります。その後man bash、最も重要なリソースのいくつかは、GregのwikiBashハッカー、および主にBashO'Reillyによって出版されているShellスクリプトに関するSteve Parkerの最近の本です。また、Bash初心者向けガイドで優れた紹介を行っています。


2
この答えは実際には私のものよりも優れています(受け入れられた答え)。
ヒルトンシャムウェイ

4

Ubuntuの、などのために利用可能な複数のシェルがありbashzshkshtcshとはcsh

だから誰かがシェルと言うときはいつでも、彼はそれらの1つについて話している。ただし、これらのシェルは互いに少し異なります。だから、bash誰かがスクリプトについて話すとき、彼はシェルを使用していますが、誰かがシェルスクリプトについて話しているとき、彼はそれ自体を使用していませんbash。しかしbash、Ubuntuのスクリプトでよく使用されるように、彼は通常そうです。さらに、さまざまなシェルは多くの面で同じであるため、通常は重要ではありません。


2
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr  3 08:58 /bin/bash*

これは、「sh」が「dash」へのシンボリックリンクであり、Ubuntuのデフォルトの対話型シェルである/ bin / bashが/ bin / shのほぼ9倍の実行可能ファイルであることを示しています。

実際、「man sh」(1590行)と「man bash」(5459行)は、bashが従来の「sh」の大きなスーパーセットであることを示しています。

詳細はこちら:


2

シェルスクリプトは、POSIX準拠のOSのシステムシェルで実行できる移植性指向のスクリプトとして定義されます。構文は、POSIX標準で定義されているシェルスクリプト言語の構文と同一または類似しています。これは、Linux / Unix / * BSDなどのほとんどのPOSIX互換OSの標準です。POSIXは、オペレーティングシステム間の互換性の最も一般的な根拠です。

前述とは異なるOSは、非対話型の使用のために異なるシェルを実装します(つまり、システムスクリプトまたは#! /bin/shshebang を使用するスクリプトを実行します)。パフォーマンス上の理由から、POSIXグラウンドでは、さまざまなPOSIX準拠のOs向けに設計されたスクリプトの非常に高いレベルの移植性が考慮されています。

前述のほとんどのOSには、通常はフル機能のbashである独立した対話型シェルがあります。Bashは大部分がPOSIX準拠ですが、追加のコマンドの大きなプールもあり、さまざまな構文をサポートしています。--posixコマンドラインオプションでBashを起動するか、Bashの実行中に 'set -o posix'を実行すると、Bashがデフォルトの領域でPOSIXによって指定された動作に一致するように動作を変更することにより、BashがPOSIX標準により厳密に準拠するようになります異なります:https : //www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.htmlを参照してください

UnixライクなOSでのシェル実行可能ファイルのShebang指定子と統一パス

シェルの実行可能ファイルの配置に関する統一ルール(通常は「/ bin /」ディレクトリにあります)のおかげで、シェルスクリプトを作成するための統一ルールを作成できます。具体的には、シェバン式に指定するパスを明確にします。スクリプトを実行する適切なシェル実行可能ファイル。Unix / Linux / * BSDファイルシステムは拡張子を本質的にサポートしていないため、ファイル拡張子は追加のヒントとして、またはインデックス作成の目的でのみ使用されます。

Debian / Ubuntuでは、具体的にbin/shbin/dash、ダッシュシェルの実行可能ファイルを指すシンボリックリンクです。これにより、ダッシュがシステムシェルになります。これは、より機能的なbashよりも4倍高速で、サイズが1/10であると推定されます。ソース:https : //unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash

Debianの/ Ubuntuの対話型端末は、パスも均一であるため、他の多くのUnixライクなオペレーティングシステム、bashの、のように、デフォルトでは次のとおりです/bin/bash

POSIX.1-2017標準:http : //pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html

一般的なルールは次のとおりです。

コマンドまたはオプションがPOSIXで定義されていない場合#! /bin/sh、最初にスクリプトに入れないでください 。

スクリプトを変換するか、エラーをチェックします

スクリプトをbashからPOSIXフォームに変換するには、シェルスクリプトのバグを自動的に確認するか、POSIX互換にするためにbashスクリプトの変更を確認する必要があります。

https://www.shellcheck.net/

http://mywiki.wooledge.org/Bashism


1
かなり良い答え、+ 1。AskUbuntuへようこそ!
セルギーコロディアズニー

1
ビン/ SH /としてダッシュ Ubuntuの上で、あなたにも引用したい場合があり、そのための記事があります。また、askubuntu.com / q / 976485/295286
Sergiy Kolodyazhnyy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.