Bourneシェル (sh)

sh

sh はかつてUnixの標準シェルであった。様々な亜種が誕生したため、現在はそれらと区別するためにBourneシェル(略してBシェル)と呼ばれている。現在ではログインシェルとして使われることはほとんどないが、シェルスクリプトを書くためによく使われている。多くのシェルが sh の上位互換であるため、sh でシェルスクリプトを作成しておけば、ほとんどのシェルで実行できるようになる。

目次

  1. 組み込みコマンド
    1. cd
  2. 変数の確認
  3. 変数の設定
  4. 変数の参照
  5. シェル変数の削除
  6. 定義済み変数
    1. $#
    2. $-
    3. $?
    4. $$
    5. $!
    6. $*
    7. $@

組み込みコマンド

cd

cd (change directory) とは、現在の作業ディレクトリを変更する組み込みコマンドである。

$ cd /home/tsuka

シェル変数

Linux/Unix の bash (Bourne again shell) ではシェル変数を使うことができる。シェル変数の使い方を以下に示す。

Unixシェルにおける「変数」とは、プログラムで扱われる数値や文字列などの値を一時的に記憶しておく領域のことです。変数を識別するために、ひとつひとつの変数に固有の名前を付けておきます。これを「変数名」といいます。

変数の確認

すべて変数の値を表示するには set コマンドを使用する。

$ set | more

変数の設定

Bourne シェルで変数に値を代入する書式を次に示します。

name=value ...
name
シェル変数の名前を指定する。
value
シェル変数に設定する値を指定する。

変数名と値のペアを空白で区切って、一度に複数のシェル変数を設定することもできる。

$ userid=tsuka homedir=/home/marina maxno=256

空白を含む文字列を変数に代入する場合、文字列を2重引用符で括ります。

$ var="spring summer fall winter"

コマンドの実行結果を変数に代入するには、コマンドをバッククォーテーション「`」で囲みます。シングルクォーテーション「'」と間違えないようにしてください。

$ today=`date`
$ echo "現在の時刻は $today です。"

Bourneシェルには、計算した結果を変数に代入する機能は無い。そのため、計算結果を変数に代入するには、引数を式として評価する外部コマンド expr を利用する。

num=1
num=`expr $num + 1`

シェル変数の参照

変数名の前にドル記号を付けると、変数に代入された値を表すことになります。この $ 変数名 という表現をコマンドの引数などに使うことで、変数の値を参照することができます。

たとえば、 echo は引数に指定された文字列を標準出力に出力するコマンドですが、文字列の代わりに変数の値を表す $ 変数名 を引数に指定すると、変数の値が標準出力に出力されます。

$ var=/tmp
$ echo var
var
$ echo $var
/tmp

変数名の後に文字列が続く場合、後続の文字列が変数名の一部と解釈されないよう、中括弧で変数名を括ります。

${name}
$ var=/tmp
$ echo ${var}directory
/tmpdirectory

シェル変数の削除

シェル変数を削除するには、unsetコマンドを使用する。

unset var
var
削除するシェル変数の名前を指定する。

シェル変数を削除する例を示す。

$ unset TMOUT

定義済み変数

定義済み変数とは、シェルによってあらかじめ定義されている変数のことである。Bouneシェルにおける定義済み変数を次に示す。

$#

定位置パラメタ数。定位置パラメタとはスクリプトや関数の引数のことです。

$-

呼び出し時にまたは set コマンドによってシェルに与えられたフラグ

$?

最後に同期実行されたコマンドが返した 10 進数

Javaのソースファイルをコンパイルして、エラーが発生したらシェル・スクリプトを終了する例を次に示します。

javac Example.java
if [ ! $? = 0 ] ; then exit ; fi
java Example

$$

このシェルのプロセス番号

$!

最後に呼び出されたバックグラウンドコマンドのプロセス番号

$*

シェルスクリプトのすべての引数。"$*"のようにダブルクォートで囲んだ場合、 "$1 $2 ... $ n" のように、全引数をひとつに繋げた形で展開される。

$@

シェルスクリプトのすべての引数。"$@"のようにダブルクォートで囲んだ場合、 "$1" "$2" ... "$ n" のように、それぞれの引数を個別にダブルクォートで囲んで展開される。

関連記事