気の向くままに辿るIT/ICT/IoT
shell/shell script

シェルの種類

ホーム前へ次へ
shell(シェル)の種類

シェルの種類

シェルの種類

 シェルの中でもログインシェル及びコマンド、スクリプトとして利用できるように開発されたshellには下記のような種類があります。

shell名称互換/参考初期OS系統
shBourne shellsh(b shell)System V系
bashBourne-Again ShellLinux/BSD/UNIX/UNIX風
poshPolicy-compliant Ordinary Shell-
kshKorn Shellsh/ksh
pdkshPublic domain Korn Shellksh
mkshMirBSD Korn Shellcsh/kshMirBSD
ashAlmquist shellsh
操作性はkshライク
BSD
dashDebian Almquist shellDebian Linux
cshC ShellcshBSD
tcshTC ShellFreeBSD/Mac OS X
zshZ Shellzsh
sh/bash/csh/tcsh/ksh
-
...etc.

 UNIX開発当初からバージョン6まで組み込まれていたシェルをベースにUNIXのバージョン7で新たに開発されたBourne Shellに、ほぼ時を同じくしてUNIXのバージョン6から派生したOSディストリビューションであるBSD上でVersion6のshellをベースに新たに開発されたcshは、間もなくtcshに移行したと云われています。

 他方、Bourne Shellをベースにksh、同じくBourne Shellをベースにcsh、kshを参考にしたbash、更に同じくBourne Shellをベースにcsh、ksh、bashを参考にしたzshが誕生という変遷があり、BSD/Berkeley Standard Distribution系でC Shell系が、System V系でBourne Shell系が、各UNIXの標準シェルとして採用され、派生拡張したshellも多くのUNIXで稼働していると言われていますが、そもそもUNIXではshellを複数インストールし、切り替えたり、コマンドライン上からサブシェルとして起動したりできるケースも珍しくありません。

 bashはGNUプロジェクトが開発したBourne Shellと互換性を持つシェルでkshはBourne Shellを参考にしているので文法もほぼ同様ですが、csh/tcshは、多くの部分でBourne Shell系とは異なり、zshはcsh系、bsh系も参考にしているので文法的には混在、共存しているようなイメージです。

 Linuxでもこれらのシェルはほとんどのディストリビューション(OS機能を盛り込んだ配布パッケージ)に入っていると思います。

 但し、UNIXの場合、ハードウェア特有の仕様に依存する部分については同じシェルであってもBSD系とSystemV系などで仕様が異なる場合があり、UNIXとLinuxでも異なる場合があります。

 Microsoftも当初オリジナルのUNIX OS(XENIX)を開発していたものの普及せず、その後MS-DOSに移行し、IBM機のプレインストールOSとして急速に普及、更に時を経て現在のWindowsがリリースされましたがWindows環境でもコマンドプロンプトというコマンド入力画面を利用することもでき(ますが、用意されているコマンド類を使ってコマンドプロンプトでできることはUNIX/Linuxに比べ、かなり少なく、コマンドや文法にも違いがあります)、更にscript実行環境WSH/Windows Script Hostを経てWindows PowerShell(Microsoft Shell)をリリースしています。

シェルの種類を確認

$ less /etc/shells 

 システムで利用可能なシェルの種類は、/etc/shellsファイルで確認することができます。

$ echo $SHELL 

/bin/bash

$ ps 

 PID PPID PGID TTY UID STIME COMMAND 

 1234 5678 2234 1 1000 10:00:00 bash 

 ... 

 現在利用しているシェルを確認するには、環境変数SHELLに設定された値をechoする方法や現在起動しているプロセスを調べるps(process status)コマンドを確認する方法などがあります。

# chsh -s ksh user_name
# echo $SHELL
/bin/sh  # <=再ログインするまで変わらない
# grep user_name /etc/passwd
...user_name.../bin/ksh  # <=反映されている
#

シェルの変更

 もし、現在のシェルを切り替えたいなら、[-s]オプション付きで[chsh](chfn)コマンドを使用すると良いでしょう。

 一般ユーザーでもこの方法で自身の使用するシェルを変更できますが、その場合もユーザー名は必須です。

 chsh後でも環境変数SHELLの値については、再ログインするまでは反映されませんが、[/etc/passwd]には即反映されるので、その変更を確認することもできます。

シェルのバージョンを確認

 シェルのバージョンを調べるには該当するシェルにオプションを指定します(尚、shellによって既定のプロンプトも異なります)。

sh/bash/kshの場合

sh -version 

$ bash --version 

ksh --version 

csh/tcsh/zshの場合

csh --version 

% tcsh --version 

% zsh --version 

[訂正・追記:2016/11/17]

 当時、日付を入れる習慣がなかったこともあって、このページの作成日時は忘れましたが、少なくとも数年に渡り、shellバージョンの確認方法において一部、不正確な情報を発信していたことが判明しました。。。訂正させて頂きます。

 これまで参考にされた方々がいらっしゃったとしたら、すみませんでした。。。

 bash/tcsh/zshは上記の通り、--versionオプションは存在しますが、当時、Cygwinだからできたのか?勘違いだったのか?*BSD/PC-UNIX/Linuxにおけるsh/ksh/cshに関しては、[version]オプションは存在しない模様。。。

 尚、少なくともkshに関しては、事前にkshと設定してログインしていれば、後述のechoを使ってecho $KSH_VERSION/${KSH_VERSION}で、bash/tcsh/zshなど追加でパッケージをインストールできるものは、基本的に*BSD/UNIX/Linuxのパッケージ管理システムによるリポジトリ上やインストール済みパッケージの確認方法において、また、tcshはset | grep -i versionでも、zshは、echo $ZSH_VERSION/${ZSH_VERSION}でも確認可能である一方、*BSDなど他で代替されないもの含め、組み込みの/bin/sh、/bin/cshに関しては、その有無含め、バージョン確認方法はわかりませんでした。

 また、標準出力(既定では画面)に表示指示を出す[ echo ]というコマンドを利用し、環境変数を参照し、環境変数BASHやSHELLを[ $BASH ]、[ $SHELL ]として、bashのバージョンを[ $BASH_VERSION ]、kshのバージョンを[ $KSH_VERSION ]として参照することもできます。

$ echo $SHELL 

$ echo $BASH 

$ echo $BASH_VERSION 

 また、type/which/whereisコマンドなどを利用してパスを確認することもできます。

その他シェルの種類

command shell名称用途
scshScheme ShellUNIX スキーマ用プログラミング言語・シェルスクリプト
UNIX Shellのスキーマに組み込まれているオープンソース
Shellスクリプト及びスキーマの大半を占めるレイヤ
slshInterpreter for S-Lang scriptsS-Lang用シェルスクリプト(対話式インタフェース含む)
wishWindowing ShellX Window System/Mac OS XなどにおけるGUI用Shell

コマンドシェルの種類

command shell名称用途
rshRemote SHellネットワークを介した遠隔(リモート)操作
sshSecure SHellネットワークを介したセキュリティ保護された遠隔操作

シェル風アプリ

名称用途
tclsh標準入力やファイルなどからTclコマンドを読み込むTclインタプリタを組み込んだshell風のアプリケーション

LINK

ホーム前へ次へ