Unixライクなすべてのオペレーティングシステムで利用可能な2つのプログラミング環境は、チューリング完全であり、他のプログラムを呼び出すことができます:awkおよびsh、Bourne / POSIXシェルファミリー。AWKはテキスト処理に特化しており(より特殊なユーティリティを補完します)、shはプログラムをまとめるためのグルー言語になることを指向しています。Shは、 LinuxおよびUNIXの世界で使用されている汎用スクリプト言語です。
POSIX SH自体の標準定義必須の機能と関連するユーティリティ。ほとんどのUnixライクなシステムは、POSIX 1003.1-2004(別名、Single Unix v3、別名Open Group Base Specification issue 6)に準拠しています。その標準の最新バージョンはPOSIX 1003.1-2008(別名Single Unix v4、別名Open Group Base Specification Issue 7)です。
すべてのLinux、unix、またはUnixライクなシステムには、パス/bin/sh
にBourneスタイルのシェルがあり、アンティークではないシステムにはPOSIX準拠のシェルがあります(バグはありません)。最新のUnixライクなシステム(Linuxを含む)はすべてshebangsをサポートしているため/bin/sh
、最初の行がの場合、スクリプトを自動的に実行します#!/bin/sh
。sh
別の場所にあるPOSIXシステムがあります(通常、実際にはUnixのようなものとは思わないOSのエミュレーション層)。
組み込みLinuxシステムには、すべてのPOSIX機能を実装していない簡略化されたBusyBoxシステムがある場合があります。BusyBoxには、フットプリントの小さなシステムに対応するためのコンパイル時オプションが多数用意されているため、事前に何を期待するかを知ることは難しく、特定のデバイスに合わせてスクリプトを調整する必要があります。BusyBoxは、shおよび各種ユーティリティの最も一般的なフットプリントの小さい実装です。もう1つ遭遇する可能性があるのは、Androidのシェル環境が非常に少ないことです(後のバージョンはそれほど貧弱ではありません)。
非組み込みLinuxシステムには、ほぼ常にダッシュまたはbashがあり/bin/sh
ます。Dashは小さくて高速なシェルであり、POSIX機能を実装するだけです。Bashは、より多くの機能を備えた大きなシェルです。
非組み込みLinuxシステムには、ほとんどの場合Bashがとしてインストールされてい/bin/bash
ます。したがって、非組み込みLinuxシステムでの移植性のために、bashが使用可能であると想定できます。bashの便利な追加機能には、配列、ドットファイルを簡単に処理する機能pipestatus
、パイプライン内のすべてのコマンドの戻り状態を取得する変数、ファイル時間の追加比較演算子、および(最近のバージョンでは)正規表現一致があります。
シェルプログラミングの特徴の1つは、プログラムを使用しているだけでなくsh
、多くのユーティリティも使用していることです。Linux上のファイル操作およびテキスト処理ユーティリティのほとんどはGNU coreutilsです(組み込みシステムでは、通常BusyBoxからです)。
Linux以外の移植性が必要な場合、最善の策はPOSIXに固執することです。他のUNIXバリアントにはbashがインストールされていない可能性があります(bashはOSXの標準インストールの一部ですが、* BSDおよびほとんどの商用ユニックスのオプションパッケージです)。LinuxおよびOSX以外のほぼすべてのUNIXバリアント(* BSDおよび商用ユニックス)には、少なくともpdkshのKornシェルのバージョンがあります。bashの便利な拡張機能の多くはkshからのものであるため、両方で実行できるスクリプトを作成すると便利ですが、不明なシステム上でbashまたはkshがどこにあるかを検出するのは少し面倒です。
シェルはすべてを行うことはできません。より洗練された言語が必要な場合、2つのより一般的な選択肢はPerlとPythonです(他のすべてはUNIXスクリプト言語としてはるかに遅れています)。Perlは従来のスクリプト言語であり、組み込みLinuxシステムに組み込まれていないものはほとんどありませんが、Pythonが台頭しつつあります(Ubuntuに推奨されるスクリプト言語になったこともあります)。Linux以外の世界では、PerlはOSXおよびOpenBSDの基本インストールの一部です。これはオプションですが、非常に一般的にFreeBSDにインストールされ、オプションですが、NetBSDにインストールされることがよくあります。
sh
ます。