金崎研では数値計算をたくさんやるので、
同じ作業を30回やらないといけない場合がよくあります。
コマンドライン(cygwinなど)で計算の後処理とかやってると
わけわかんなくなってきます。
その時に役立つのが“スクリプトファイル”です。
/*-------------------------------------------------------*/
≪スクリプトファイルとは?≫
スクリプトファイルとは簡単に言うとUNIXコマンドを並べたファイルということです。
同じ作業を何十回も繰り返す、決まった作業を勝手にやる、
などあらかじめ動作内容の分かっているときは
これを作ると操作がぐっと楽になります。
/*-------------------------------------------------------*/
≪Hallo World!!≫
では、入門です。入門はやっぱりHallo World!!
まずは以下の文章を test.sc というファイルに入れてみよう。
#!/bin/shecho 'Hallo World!!'
こいつのいるディレクトリで
sh test.sc
と打つと Hallo World と表示されます。
これが一番簡単なスクリプトファイルです。
この例からわかるようにスクリプトファイルの中では 'ls, cd, echo' といった
通常のコマンドがそのまま使えます。
/*-------------------------------------------------------*/
≪繰り返し1≫
では同じ作業を繰り返したい時はどうすればいいのか?
それには
for i in N1 N2 N3
do
”何か作業”
done
とします。これは i に N1, N2, N3 と代入して繰り返す、という意味になります。
ここで注意するのは N1, N2, N3 は連続してなくてもいいということです。
では、具体例をあげましょう。
さっきの test.sc を以下のように書きなおします。
#!/bin/sh
for i in 10 20 30
do
echo $i
echo 'Hallo World!!'
done
こいつを同じように
sh test.sc
で作動させると、
10
Hallo World!!
20
Hallo World!!
30
Hallo World!!
のように表示されます。
i に10,20,30が順に代入されたうえでdo と done に挟まれた作業が繰り返されています。
/*-------------------------------------------------------*/
≪繰り返し2≫
しかし、このままでは30回同じ作業を繰り返す場合、
for i in 1 2 3 4 ..... 28 29 30
do
”何か作業”
done
としなくてはいけません。
30ならいいかもしれませんが、100とか200になったらめんどくさいです。
そこで seq を使います。
具体的には for の後の数字を$(seq 1 30)とすることです。
100 回 Hallo World!! を表示する時の test.sc は下のようになります。
#!/bin/sh
for i in $(seq 1 100)
do
echo $i
echo 'Hallo World!!'
done
これを作動させると
1
Hallo World!!
2
Hallo World!!
3
Hallo World!!
・
・
99
Hallo World!!
100
Hallo World!!
の出力を得られます。
/*-------------------------------------------------------*/
≪繰り返し3≫
最後に30個のフォルダを一度に作るスクリプトを組んでみましょう。
ファイル名を 'dir30.sc' とします。ファイルの中身は以下
#!/bin/sh
for i in $(seq 1 30)
do
mkdir $i
done
これを作動させると、名前が1-30となっているフォルダができています。
/*-------------------------------------------------------*/
≪まとめ≫
ここまでの内容を応用することで、単純作業をかなり簡略化できます。
皆さん頑張ってください。
/*-------------------------------------------------------*/
≪執筆後≫
すごい疲れました。わかりにくい、ここどうなってんだ?、うまくいかない、などの感想待ってます。
次回は
短期集中連載 第2弾 『Makefile』
ならたく
web siteはこちらへ.
2009/12/08
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿