1. シェルの機能

シェルの役割
シェルの役割
(イラストをクリックするとサムネイルが表示されます)

シェルはOSのカーネルの機能を利用するためのインタフェースだと述べました.
インタフェースであるからには, 何かと何かの繋ぎ役になっているわけです.
1つは何でしょうか?そう, OSのカーネルですよね. そしてもう1つはユーザコマンドです.

ユーザインタフェース機能

UNIXのターミナルエミュレータから入力されたコマンドはシェルが解釈(interpret)
をして, OSのカーネルに伝達し, その結果をターミナルエミュレータにレスポンスと
して出力するということをしています. このことから, シェルはコマンドインタプリタ
と呼ばれることもあります. シェルがあるからこそユーザはリダイレクト(標準入出力,
エラー出力の切替)やパイプ(コマンドの出力結果を別のコマンドの入力として渡す),
エイリアス(コマンドの別名定義)などが可能になるわけです.

プログラミング機能

また, シェルのもう1つの機能としてプログラミング機能があります. シェルで記述
されたプログラムコードをシェルスクリプトと呼びます. シェルスクリプトによって,
コマンドのバッチ処理(コマンドの連続処理)が可能になります. シェルスクリプトも
汎用プログラミング言語のように変数や関数(シェル変数やシェル関数)を定義する
ことができ, また分岐処理やループ処理を利用して構造化プログラミングが可能なので,
単なるコマンドの連続実行だけでなく, より複雑な処理も実現できます.

まとめると, シェルは以下の2つの機能があるということです.

ユーザインタフェース機能(コマンドインタプリタ機能)
カーネルとユーザコマンドのインタフェース
プログラミング機能
コマンドのバッチ処理

ちなみに, WindowsにおけるUNIXのシェル機能に相当するプログラムとしては,
コマンドプロンプト(スタートアップメニュー >> すべてのプログラム >> アクセサリ)
があります. しかしながら, ユーザインタフェース機能(コマンドインタプリタ機能)は
UNIXのシェルと比較するとかなり劣ります(ただし, Windows 7以降ではユーザインタ
フェース機能を強化したWindows PowerShellが標準搭載されているようです).

2. シェルスクリプトの例

ファイルの種類を分類するシェルスクリプト

                    #!/bin/sh

                    if [ $# -eq 0 ]  #引数の個数チェック
                    then
                        echo "usage : freport filename"  #引数なしの場合
                    else
                        if test -d $1  #ディレクトリファイル ?
                        then
                            echo "1 : Directory"
                        fi

                        if test -e $1  #ファイルが存在する ?
                        then
                            echo "2 : File exists"
                        else
                            echo "2 : File not exists"
                        fi

                        if test -f $1  #通常ファイル ?
                        then
                            echo "3 : Regular file"
                        fi

                        if test -r $1  #読み込み可能 ?
                        then
                            echo "4 : File is readable"
                        fi

                        if test -s $1  #ファイルサイズが0でない ?
                        then
                            echo "5 : File has a size greater than zero"
                        fi

                        if test -w $1  #書き込み可能 ?
                        then
                            echo "6 : File is writable"
                        fi

                        if test -x $1  #実行可能 ?
                        then
                            echo "7 : File is executable"
                        fi
                    fi
                

一括コンパイルスクリプト

                    #!/bin/sh

                    for SRC in $@
                    do
                        EXE=`echo $SRC | sed -e "s/\..*//"`
                        cc -o $EXE $SRC
                    done
                

ファイルの種類に応じてビューワーを変更

                    #!/bin/sh

                    case $1 in
                        *.txt | *.c)  #テキストファイル or Cソースファイル
                            view $1
                            ;;
                        *.log)  #ログファイル
                            less $1
                            ;;
                        *)
                            if [ -x $1 ]
                            then
                                od -t x2 $1  #実行可能ファイルならダンプ
                            else
                                ls -l $1  #リスト表示
                            fi
                            ;;
                    esac
                

引数で指定されたファイル名を表示

                    #!/bin/sh

                    while [ "$1" != "" ]  #$1の引数が空でないならループ
                    do
                        echo $1
                        shift  #引数リストをシフト
                    done
                

3. UNIX(Linux)をツールとして使いこなすとは

実は, UNIX(Linux)をツール(道具)として使いこなすとは, シェルを使いこなすことと言えます.
すなわち, 上記のシェルの2つの機能を習得していくことが, UNIXをツールとして習得していくことになるのです.

4. シェルの種類

シェルにはいくつかの種類があります. 代表的なものを簡単に説明します.

3 - 1. sh(bsh : Bourne SHell)

どのUNIX / Linuxにも用意されているため, シェルスクリプトで最も利用されるシェル.
(汎用性の面で)プログラミング機能は高いが, インタフェース機能は弱い.

3 - 2. bash(Bourne Again SHell)

Linuxの標準シェルであり, shの機能強化版.
インタフェース機能, プログラミング機能ともに要求するユーザに利用される.

3 - 3. csh / tcsh

cshはBSD系UNIX用に開発されたシェル. tcshはcshの機能強化版.
インタフェース機能は優れているが, プログラミング(スクリプト)では, あまり利用されていない
(他のシェルとスクリプトの文法が異なるため. csh / tcsh の記述はC言語に類似している).


  1. トップページ
  2. カーネルを理解する
  3. シェルを理解する
  4. システムコールを理解する