Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2892

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

$
0
0

はじめに

この記事は
シェルプログラミング入門1
シェルプログラミング入門2
の続編である。

シェル関数

シェル関数は下のような形式である。

name(){command・・・・・
}

ls -lと同じ動作をするlslという関数を作ってみる。

% lsl(){>ls-l>}
% lsl
total 48
-rw-r--r--  1 Tomoki  staff    7  4 16 09:23 abc
-rwxr-xr-x  1 Tomoki  staff  127  4 16 09:17 append*-rwxr-xr-x  1 Tomoki  staff   25  5  2 12:14 kkk*-rwxr-xr-x  1 Tomoki  staff   18  5  2 12:07 mmm*-rwxr-xr-x  1 Tomoki  staff   45  5  2 11:51 nnn*-rw-r--r--  1 Tomoki  staff   13  4 16 09:30 xyz

$*で引数をとれるようにしてみる。

% lsl(){function>ls-l$*function>}
% lsl *c   
-rw-r--r--  1 Tomoki  staff  7  4 16 09:23 abc

これから基本的に関数内の変数には_で始めるようにする。

ちなみに以下のようなシェルスクリプトを作ったとき、そのまま実行してもシェルスクリプト内で定義されたコマンド(以下の場合pse)を使うことができない。
そういうときには.コマンドを使って、. script_fileのようにする。

aaa
% chmod +x aaa
% ./aaa
% pse 
zsh: command not found: pse
% . ./aaa
% pse
  PID TTY           TIME CMD
    1 ??        12:58.82 /sbin/launchd
  136 ??         1:14.00 /usr/sbin/syslogd
      ・・・・・・・・

.コマンドを使って実行するシェルスクリプトには拡張子.shをつけることが多い。また、直接実行しないように、モードは読み書きだけを許可し、ディレクトリも普通のコマンドとは分けられる。

組み込みコマンド

nullコマンド:

何もしないがいつも0(true)を返すコマンド。

また、nullファイルを作ったり、ファイルの中身を消去したりすることができる。%: > filecp /dev/null filecat /dev/null > fileと同じである。

ドットコマンド.

先ほどシェル関数のところで出てきた. fileという形で使うもの。
普通のコマンドと違い、新しくプロセスを作らず現行のシェルのプロセスを使って指定されたファイルを読み込み実行するもの。

breakコマンド

forやwhileのループから抜け出すときに使用するコマンド。
デフォルトでは1つのループを抜ける。
break numberのように何個のループを抜けるか引数として指定できる。

continueコマンド

forやwhileのループで,処理を中断し、次の繰り返しに移行させるコマンド
デフォルトでは次の繰り返しのステップに移行する。
break numberのように何番目の繰り返しのステップに移行するか引数として指定できる。

ehcoコマンド

引数の部分を標準出力に出力する。
echo parameterのようにして使う。

使っているUNIX(system V系列かBSD系列)によって出力方法が異なる。

evalコマンド

evalコマンドは複数の置換などを1行のコマンドで全部展開する。

% VAR1=value 
% VAR2=VAR1
% echo$"$VAR2"$VAR1#代入されない
% echo$$VAR2  
22202VAR2
% echo$'$VAR2'$VAR2
% echo\$$VAR2$VAR1#evalを使えばVAR1にも代入される
% eval echo\$$VAR2
value
% eval echo$"$VAR2"
value

またevalコマンドにはコマンドの結果が「何かを実行させるコマンドの形式をとって」返されたとき、それをそのまま実行させるというような場合にも利用される。

execコマンド

exec commandのような形で使う。
新しくプロセスを作らず現行のカレントシェルのプロセスと置き換えて、引数のコマンドを実行させる。

exitコマンド

シェルを終了するときに使う。
exit numberのように番号を引数にすることでシェルスクリプトの終了コードを指定できる。
また、終了コードは$?変数に渡される。

exportコマンド

export nameというふうにnameで指定した変数を他のコマンドやシェルからも利用できるようにする。

pwdコマンド

カレントディレクトリの完全パスを表示する。

readコマンド

標準入力を読み取り、変数に代入する。

aa
#!/bin/shecho-n"enter yes or no --> "read ANSWER
echo$ANSWER
% ./aa                            
-n enter yes or no -->yes#yesと入力するyes

readonlyコマンド

指定された変数を書き換え不可にする。変数に代入したり、unsetしたりできなくなる。
readonly name...のように使う。

returnコマンド

シェルの関数から抜けるコマンド。
引数が関数の返り値になる。

setコマンド

シェルのオプションをONにしたりOFFにしたりする。

% sh       #シェルの起動$ echo abc
abc        #普通は結果のみ$ set-v#-vオプション(冗長モード)をつける$ echo abc
echo abc   #結果の前に入力コマンドが表示される
abc
$ set +v   #-vオプションを元に戻すset +v
$ echo abc
abc        #結果のみ

そのほかにもいろいろなオプションがある。
-をつけるとオプションがONになり、+をつけるとOFFになる。

set parameterのようにすると、位置パラメタに値をセットすることができる。

vvv
#!/bin/shecho$0$1$2$3$4set aa bb cc
echo$0$1$2$3$4

これを実行すると

 % chmod +x vvv
% ./vvv 1 2 3 4 5
./vvv 1 2 3 4
./vvv aa bb cc

setコマンドによってそれまでの位置パラメタの値が全部クリアされる。

引数なしにsetとすると、現在セットされている変数の一覧とその値が表示される。

shiftコマンド

位置パラメタの値を左にずらす

ooo
#!/bin/shecho$0$1$2$3$4$5$6$7$8$9shift
echo$0$1$2$3$4$5$6$7$8$9shift 3
echo$0$1$2$3$4$5$6$7$8$9shift$# #位置パラメタをクリアするecho$0$1$2$3$4$5$6$7$8$9

位置パラメタを全部クリアするにはshift $#とする。

これに引数を与えて実行すると

% chmod +x ooo
% % ./ooo aa bb cc dd ee ff gg hh ii
./ooo aa bb cc dd ee ff gg hh ii
./ooo bb cc dd ee ff gg hh ii
./ooo ee ff gg hh ii
./ooo

testコマンド

条件を判定し、正しいとき0(true)を返す。

test expressionもしくは[ expression]のように書く。

trapコマンド

trap action signal...

signalに指定したシグナルを受け取ったときにどういう処理をするかをactionのところに指定する。actionはコマンドを並べたもの。

typeコマンド

コマンドが組み込みコマンドかどうかやコマンド本体のある場所を調べる。

% type echo date
echo is a shell builtin
date is /bin/date

umaskコマンド

ファイルを生成するときにモードを決定する。
-rwxr-xr-x-rw-r--r--などがモードである。モードは8進数で表現され、rが4, wが2, xが1と考える。
例えば、-rw-r--r--は644となる。

umask mask 

としてからファイルを作る(touchコマンドなどで)と、作成したファイルのモードは666(対象がディレクトリなら777) - maskとなる。

何もせずにファイルを作るとumaskの値は022,つまり644(読み書き移動可)となる。

unsetコマンド

指定した変数や関数を消去する。

unset name

waitコマンド

引数に動作しているプロセスIDを指定し、
そのプログラムが終了するまで待つ。

command&
 ・・・・
wit $1

引数を指定しないとき、そのシェルから派生しているプロセスが全て終了するまで待ち状態となる。返り値は0となる。

参考

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


Viewing all articles
Browse latest Browse all 2892

Trending Articles