シェルの特徴

最も一般的な 3 種類のシェル

ほとんどのシステムでは複数のシェルが提供されている。多くの場合、シェルスクリプトの作成では Bourne シェルを使用し、対話で使用するときは他の 2 つのシェルを使用する。

/etc/passwd ファイルは、対話型 UNIX セッションでどのシェルを使用吸うかを定義します。ログイン時に、/etc/passwd のエントリがチェックされます。各エントリーの最後のフィールドは、デフォルトシェルとして実行するプログラムを示します。
プログラム名実行するシェル
/bin/shBourne シェル
/bin/rsh制限付き Bourne シェル
/bin/jshジョブ制御を含む Bourne シェル
/bin/kshKorn シェル
/bin/rksh制限付き Korn シェル
/bin/cshC シェル

コマンドラインにプログラム名を入力すれば、別のシェルに変更できます。たとえば、Bourne シェルから C シェルに変更するには、次のように入力する。

$ exec csh


共通の機能

次の表に、Bourne シェル、Korn シェル、C シェルに共通の機能を示します。Korn シェルは Bourne シェルの拡張バージョンです。したがって、Korn シェルには Bourne シェルのすべての機能のほかに、追加機能も含まれています。コマンド bg、fg、jobs、stop、suspend はジョブ制御をサポートするシェルのみ使用できます。
記号/コマンド意味/動作
>出力をリダイレクトします
>>ファイルの最後に追加します
<入力をリダイレクトします
<<ヒアドキュメント (入力のリダイレクト)
|出力をパイプします
&プロセスをバックグラウンドで実行します
;同じ行のコマンドを区切りします
*ファイル名のどの文字とも一致します
?ファイル名の 1 文字と一致します
[ ][ ] で囲んだ 1 文字のいずれかと一致します
( )サブシェルで実行します
` `` ` で囲んだコマンドを先に実行して、その出力と置換します
" "部分的な引用を示します (変数とコマンドの展開が可能)
' '完全な引用 (展開なし)
\(バックスラッシュ)後続の文字を引用 (後続の文字の特殊な意味を解除します)
$var変数の値を使用します
$$プロセス ID
$0コマンド名
$ nn 番目の引用 (0
$*すべての引用を単純な単語として表します
#コメントを示します
bgバックグラウンドで実行します
breakループから脱出します
cdカレントディレクトリを変更します
continueプログラムループを再開します
echo引数を表示します
eval引数を評価します
exec新しいシェルを実行します
fgフォアグラウンドで実行します
jobsアクティブジョブを表示します
kill実行中のジョブを終了します
newgrp新しいグループに変更します
shift位置パラメータをシフトします
stopバックグラウンドジョブを一時停止します
suspendフォアグラウンドジョブを一時停止します
timeコマンドの実行時間を測定します
umaskデフォルトのファイルアクセス権を設定するか、または、アクセス権の一覧を表示します
unset変数または関数の定義を解除します
waitバックグラウンドジョブが終了するのを待ちます


異なる機能

3 つのシェルで異なる機能を示します。
shkshcsh意味/動作
$$%プロンプト
>!強制的なリダイレクト
>>!強制的な追加
> file 2>&1> file 2>1>& filestdout とstderr の組み合わせ
{}リスト内の要素を展開します
` `$( )` `` ` で囲んだコマンドを実行して、その出力と置換します
$HOME$HOME$homeホームディレクトリ
~~ホームディレクトリを表す記号
var = valuevar = valueset var = value変数に値を代入します
export varexport var = valsetenv var val環境変数を設定します
${ nn }9 つより多くの引数を参照できます
"$@""$@"すべての引数を個別の単語として示します
$#$#$#argv引数の数
$?$?$status終了ステータス
$!$!バックグラウンドの終了ステータス
$-$-現在のオプション
. file. filesource filefile からコマンドを読みこみます
alias x = yalias x y名前 x が y をあらわすことを示します
casecaseswitch/case場合分けを指定します
cd ~-popd/pushdディレクトリを切り替えます
donedoneendループステートメントを終了します
esacesacendswcase または switch を終了します
exit [n]exit [n]exit [(expr)]ステータスを指定して終了します
for/dofor/doforeach変数を使用してループします
print -rglobecho のエスケープを無視します
hashalias -thashstatコマンドのハッシュの状態を表示します
hash cmdsalias -t cmdsrehashコマンドの位置を記憶します
hash -runhashコマンドの位置を解除します
historyhistory前に実行したコマンドをリストします
r!!前に実行したコマンドを再実行します
r str! strstr からはじまるコマンドを再実行します
r x = y cmd! cmd :s/x/y/コマンドを変更して実行します
if[$i eq 5]if ((i==5))if ($i==5)if ステートメントの例
fifiendifif ステートメントを終了します
ulimitulimitlimitリソースの制限を設定します
pwdpwddirsカレントディレクトリを表示します
readread$,端末から読み取りします
trap 2trap2onintr割り込みを無視します
unaliasunaliasエイリアスを解除します
untiluntiluntil ループを開始します
while/dowhile/dowhilewhile ループを開始します