シェル・プログラミング:2. 変数:定義と代入
メタ文字は,変数名に使用可能ではないことは既に理解できたことでしょう。そこで,変数名に使用可能な文字,設定ルール,変数への値の代入を見てみましょう。
- 変数に使用可能な文字:
0-9, a-z, A-Z, _
. 但し,頭文字に数字は使用できない。 - 変数
var
に値value
を代入:var=value
. 但し,=
の前後にスペースを入れない。 - 変数
var
の参照:$var
################################################# # 例 1 # ファイル file1 をソートし, # それを file2 へ書き込む ################################################# #!/bin/sh aaa=file1 # 変数 aaa に file1 を代入。= の前後にスペースを入れない。 bbb=file2 sort $aaa > $bbb # 変数 aaa を $ を付し参照。sort はコマンド。> はリダイレクト。
- 変数にターミナルから値を代入
ケース1) コマンドラインからの代入
% sh script value1 value2 ... value9
value1
は$1
という変数に格納,value2
は$2
という変数に格納,以下9個まで格納。$*
という変数に$1
から$9
すべてを格納。$#
という変数に引数(格納した変数)の個数を格納。ちなみに,$0
という変数にはスクリプト名が格納される。######### # 例 2 ######### #!/bin/sh echo $0 written by Taro. (C) 2002 Taro. echo $# words inputed. echo $* echo The first word is: $1
実行例) % sh script Hello World! script written by Taro. (C) 2002 Taro. 2 words inputed. Hello World! The first word is: Hello %
ケース2) 相手に尋ねる:
read var
######### # 例 3 ######### #!/bin/sh echo -n "Enter your message: " # echo -n はコマンド read message # message という変数に格納 echo $message echo Goodbye.
実行例) % sh script Enter your message: How do you do? How do you do? Goodbye. %
- 変数にコマンドの値を代入:
var=`command`
######### # 例 4 ######### #!/bin/sh num=`ls | wc -w` # ls と wc -w はコマンド。| はパイピング。 echo $num files in the current directory.
実行例) % sh script 6 files in the current directory. %
- スペース/タブで区切られた文字列を変数
$*
($1~$9
) に代入set character1 character2 ... character9
######### # 例 5 ######### #!/bin/sh set `echo *` echo $# files in the current directory. echo $*
実行例) % sh script 6 files in the current directory. example.sh hello.c hello.out hello.pl hello.sh outcome.txt %
- その他特殊な変数
$$ プロセス番号 $? 最後に実行したコマンドの終了状態。番号で表示。正常は0。 $@ これをダブル・クウォーテイションで囲まない場合,$* と同じ。 sh script 'Hello World!' としたとき,Hello World を 一つとしたい場合,これをダブル・クウォーテイションで囲む。
- 変数と文字の連結
例えば,変数
var
に文字 "exp
" が代入されていたとしましょう。このとき,次を実行するとどうなるでしょうか。#!/bin/sh var=exp echo $varport
実は,"
export
" とは出力されません。この場合,次のようにすると良いです。#!/bin/sh var=exp echo ${var}port
すると,変数
var
を正しく解釈され,"export
" と出力されます。