LoginSignup
0
0

シェルプログラミング入門 2

Last updated at Posted at 2020-05-02

シェル変数

シェルプログラミング入門1の続き

シェル変数の作り方

シェル変数の名前はアルファベッド、数字、_を使う。
ただし、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のとき変数を設定する。:がないときは変数が未使用のときのみ動作する。

位置パラメタ

nnn
#!/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を使えば、ずらすことができる。

nnn
#!/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

あるコマンドに渡される引数の数を示すには$#という変数を使う。
ただし、コマンド自身は数に入れない。

mmm
#!/bin/sh
echo $#
% chmod +x mmm
% ./mmm a b c
3
% ./mmm "a b c"
1

引数全体を表現するには$*$@がある。

kkk
#!/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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0