DOS を知っている人ならバッチファイル(*.bat) を作ったことがあるでしょう。 あるいは、UNIX 上で自動的にいくつかの プロセスを実行したいと思うことがあると思います。 これを実現するのがシェルスクリプトです。
ここではシェルスクリプトの簡単な書き方を紹介しておきましょう。
#!/bin/sh list 1 list 2 ...... list nここで、先頭行はこのファイルを
/bin/sh
という
UNIX の基本的なシェルに渡して実行させることを
意味します。この部分を省略すると
ユーザのデフォルトのシェル(これは
finger
コマンドを実行すると
みることができます。)に実行させることに
なります。その他にも
#!/usr/local/bin/perl
と書くとインタプリタ型の言語
perl
に実行させる perl
スクリプトであることを意味します。
2行目以降はコマンドラインから入力するのと 同じコマンドリストです。
このように シェルスクリプトは非常に簡単な 構文で書くことができます。 以下、いくつか例を見ていきましょう。
先頭行は基本的に省略し、スクリプトファイル名は
Script
であるとします。
dvi2ps $1 |lpr -Psp2これは、
Script filename.dvi
とすることでプリンタsp2
に
打ち出すものです。
$1
は引数(コマンドに与える
パラメータ)の1番めを表します。
これだと、たとえば次のように
$ Script filename -f 1 -t 15と他のパラメータをつけても
-f 1 -t 15
は意味を
持ちません。(因みにこのオプションは、dvi2ps
のオプションで
1ページから15ページまでポストスクリプトに変換するというものです。)
これを期待通り動かしたければ
Script
を次のように変更します。
dvi2ps $* |lpr -Psp2ここで、
$*
は引数のすべてで
その部分を置き換えることを意味し、
結局、上記のようにやると
dvi2ps filename -f 1 -t 15 |lpr -Psp2
が実行されることになります。
if [ `hostname` = smaux ]; then echo Host is smaux. This is one of the jservers. elif [ `hostname` = diana ]; then echo Host is diana. Mathematica can run. else echo Host is `hostname`. No comment. fiまず、
if list1 then list1e [ elif list2 then list2e ] ... [ else list3 ] fi
について。これは list1
という条件が真ならば
list1e
を実行し、そうでなくてかつ list2
が真ならば、list2e
を実行し、
そして、最後にどの if/elif
にも引っかからなかったら
list3
を実行せよ、というものです。
ここで、[]
に囲まれた部分はなくても構わないものです。
つまり、もっとも簡単な if
文は
if list1 then list1e fi
です。
つぎに、`command`
は コマンド command
を実行して、その結果を返すというものです。
つまり、`hostname` は、コマンド hostname を実行して、
その結果を値にもつものです。したがって、
if [ `hostname` = smaux ]は
hostname を実行した結果が smaux ならば、
という意味です。
echo Host is smaux. This is one of the jservers.これは、単に "Host is .... vers." というメッセージを 画面に表示するというものです。 そして、最後に、smaux でも kinkaku でもなければ、
No comment.
と表示するというわけです。
sh
のマニュアルを見ることで知ることができます。
また、
#!/usr/local/bin/zshで始まるスクリプトの時には、zsh 特有の 関数が使えたりします。
#!/usr/local/bin/zsh a=$[RANDOM % 10] case $a in 0) ... 1) ... ...... 9) ... esacこれは、乱数を生成してそのあまりで場合わけをするものです。