ここではシェルスクリプトについて学びましょう.
シェルスクリプトというのは,シェルに解釈・実行させるスクリプト (プログラム) です. これまではコマンドは一つずつ入力し実行させていましたが,その代わりに,スクリプトとしてファイルに順に並べて記述しておき,まとめて実行させることができます. 複雑な作業を何度も行うときは,シェルスクリプトを作っておくと便利です. 既存のコマンドを利用して簡単にプログラムを作ることができます. 小さなツールであるとか,初期設定ファイルなどでよく用いられます. なお,シェルの種類が異なれば,当然文法が異なるので注意する必要があります. 特に sh 系と csh 系は大きく文法が異なります. ここでは sh 系である bash の文法に沿って説明します.
コンピュータのログイン記録から g999999 が含まれる行だけを抜き出すには,次のコマンドを入力しました (28.1 フィルタ).
last | grep g999999
これを mylast というコマンドにしてみましょう. もちろんこれだけのことならエイリアスでも充分なのですが,シェルスクリプトにしておくと他のプログラムからも呼び出すことができるという利点があります.
エディタなどを使って,以下の内容を mylast というファイル名で保存してください.
#!/bin/sh last | grep g999999
1行目はこのファイルが sh のシェルスクリプトであることを示すおまじないです. 2行目以降に実行するコマンドを書きます.
次に,このファイルのパーミッションを変更して実行可能にします (13.4.13.2 パーミッションを変える).
chmod u+x mylast
こうすると,以下のようにパス名を指定することで今作ったシェルスクリプトを実行することができます.
./mylast
コマンドを入力したときと同じ結果になりましたね.
このシェルスクリプトのファイルをコマンドサーチパスに含まれるディレクトリに置くことで,新しいコマンドとして実行できるようになります (13.4.12 実行ファイルのパス). 例えば ~/bin が PATH に含まれているならば, ~/bin に置きます.
export PATH=~/bin:$PATH echo $PATH /home01/g999999/bin:/sw/lib/wrappers:/sw/fix-apple-x11/bin:/opt/ECC/bin:/opt/HWB/bin:... mkdir ~/bin mv mylast ~/bin mylast
このようにして作ったコマンドは,システムに初めから備わっているコマンドと全く同様に実行させることができます.
この例では1行だけでしたが,順に実行する多数のコマンドを書いてまとめて実行させることもできますし,変数を使ったり条件分岐や繰り返しなどの制御構造を使ったりすることで,さらに複雑なこともできます.
例えば,以下はカレントディレクトリにある拡張子が .txt のファイルの文字コードを全て日本語EUCに変換するシェルスクリプトです.ちなみにここで用いている i はシェル変数です.
#!/bin/sh for i in *.txt do nkf -e $i > $i.euc mv $i.euc $i done
このシェルスクリプトはカレントディレクトリの内容を変更します. 実行は自己責任でお願いします.
シェルの詳しい文法については, bash の場合は man bash として読めるマニュアルに記述されているほか,ウェブ上や書籍にも豊富に情報がありますので,それらを参照してください.
シェルスクリプトをコマンドとして呼び出した場合は,呼び出した側のシェルとは別のプロセスで実行されるということに注意してください. シェルスクリプトの中で変数を変更したりしても,呼び出した側のシェルには影響はありません. 初期設定ファイルのように読み込まれるものの場合は別です.
28.7 ジョブ | 28.8 シェルスクリプト | 目次に戻る | ||
2009年度版に向けて現在作業中です.
このページに関してお気づきの点がありましたら
コメント投稿システムまでお願いします.
|
Mon, 14 Apr 2008 14:28:26 JST (473d) |