シェル変数
シェル変数の作り方
シェル変数の名前はアルファベッド、数字、_を使う。
ただし、1文字目に数字は使えない。
普通はアルファベッドの大文字を使う。
variable=variable
variable = variable #スペースを入れてはいけない
シェル変数の値を見たり操作したりする時は$variable
のようにする。${variable}
でも同じ。
% pwd
/
% DIR=/tmp
% cd $DIR
% pwd
/tmp
中括弧をつけるかつけないかの違いは
% FOO=abc
% echo $FOOBAR
% echo ${FOO}BAR
abcBAR
ただし、$DIR/work
や$ROOT.c
のようにアルファベット、数字,_以外の文字を使うとシェル変数の区切りとみなされるので、{}を付けなくてもよい。
nullのシェル変数
VARIABLE=
VARIABLE=""
シェル変数の初期設定
変数の設定方法は以下の4つがある。
${variavle:=value}
${variavle:-value}
${variavle:?value}
${variavle:+value}
:
は省略可能。 :
があると変数が未使用もしくはnullのとき変数を設定する。:
がないときは変数が未使用のときのみ動作する。
位置パラメタ
#!/bin/sh
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
% chmod +x nnn
% ./nnn a b c d e f g h i j k l m n
./nnn a b c d e f g h i
%
% ./nnn *
./nnn abc append nnn xyz
shift
を使えば、ずらすことができる。
#!/bin/sh
shift 3
echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9
% ./nnn a b c d e f g h i j k l m n
./nnn d e f g h i j k l
あるコマンドに渡される引数の数を示すには$#という変数を使う。
ただし、コマンド自身は数に入れない。
#!/bin/sh
echo $#
% chmod +x mmm
% ./mmm a b c
3
% ./mmm "a b c"
1
引数全体を表現するには$*
、$@
がある。
#!/bin/sh
echo $*
echo $@
% chmod +x kkk
% ./kkk a b c
a b c
a b c
ただし、"$@"
としたいときは"$1 $2 $3"
"$*"
としたいときは"$1" "$2" "#3"
としなければならない。
ちなみに\$0〜\$9, \$#, \$*, \$@ は全て書き込み禁止の変数である。
特殊な変数
$?
,$$
,$!
,$-
の4つの書き込み禁止の特殊な変数がある。
$?変数
コマンド実行時の終了ステータスを表す。
command
if [ $? -eq 0]
then
・・・・・・・・
fi
$$変数
現在動作しているコマンドの「プロセスID」がセットされている。
ps
コマンドで動作しているプロセスが表示される。
% ps
PID TTY TIME CMD
750 ttys000 0:00.19 -zsh
このPIDがプロセスIDのことである。
/tmp/tmp.$$
のようにしてテンポラリファイルを作るときに使用する。
$!変数
&
でコマンドをバックグラウンドで走らせたときのプロセスID
が$!にセットされる。
command &
・・・・
wait $&
$-変数
シェルの起動時のフラグやsetコマンドを使って設定したフラグの一覧がセットされている。
% echo $-
569XZilms
終わりに
続きは
シェルプログラミング入門3
前回のは
シェルプログラミング入門1