シェルスクリプト入門 [変数]

UNIX入門 > シェルスクリプト入門 > 変数
シェル変数
特殊な変数

変数

シェル変数

変数は文字列や数値など、さまざまなデータを記憶しておくものです。変数名に使える文字は、英数字または「 _ 」(アンダーバー)で、1文字目に数字は使えません。変数に値を代入するには「変数名=値」とします。「=」の前後にはスペースやタブを入れることはできません。変数を参照する場合は、変数名の前に「$」を付けます。下記の例を参考に解説します。
test.sh

#!/bin/sh
#-----変数に値を代入します-----
PARA1="string"
PARA2=string
PARA3=3
PARA4=`date '+%Y-%m-%d'`
#-----変数を「echo」で表示します-----
echo "PARA1 = ${PARA1}"
echo "PARA2 = ${PARA2}"
echo "PARA3 = ${PARA3}"
echo "PARA4 = ${PARA4}"
echo "PARA5 = ${PARA5}"

上記の「echo」コマンドの部分のように、どこまでが文字列でどこからが変数なのか誤解釈されそうな場合には、変数名を「{ }」で囲む必要があります。変数名は常に「{ }」で囲むようにすることをお勧めします。PARA1 と PARA2 は「" "」の有り無しという違いがありますが、結果は同じです。PARA4 のようにコマンドの結果を変数に格納したい場合は、「` `」でコマンド部分を囲みます。PARA5 のように値が代入されていない変数は、空文字となります。
それでは実際に上記スクリプト実行してみます。以下のような結果となります。

$ test.sh
PARA1 = string
PARA2 = string
PARA3 = 3
PARA4 = 2006-02-03
PARA5 =
$

特殊な変数

ここでは、記号または数字を使用した特別な意味を持つ変数について説明します。これらの特殊な変数は、参照専用で値を代入することはできません。

変数 意味
$$ シェル自身のPID(プロセスID)
$! シェルが最後に実行したバックグラウンドプロセスのPID
$? 最後に実行したコマンドの終了コード(戻り値)
$- setコマンドを使って設定したフラグの一覧
$* 全引数リスト。"$*"のように「"」で囲んだ場合、"$1 $2 … $n" と全引数を一つにくっついた形で展開される。
$@ 全引数リスト。"$@"のように「"」で囲んだ場合、"$1" "$2" … "$n" とそれぞれの引数を個別にダブルクォートで囲んで展開される。
$# シェルに与えられた引数の個数
$0 シェル自身のファイル名
$1〜$n シェルに与えられた引数の値。$1は第1引数、$2は第2引数…となる。

シェルに引数を渡すには、シェルの後ろにスペースで区切って、引数を並べていきます。 下記サンプルを例に引数について解説します。
arg_test.sh

#!/bin/sh
echo $#
echo $@
echo $0
echo $1
echo $2
echo $3

それでは実際に上記スクリプトに引数を与えてみます。以下のような結果となります。

$ arg_test.sh a b c
3
a b c
arg_test.sh
a
b
c
$

↑先頭へ