Amazon

2013年9月15日日曜日

シェルスクリプトのひな形

シェルスクリプトを書くときにいつも使っているひな形です。
#! /bin/sh
#
# title
#
# Usage:
#
# Input:
#
# Output:
#

# Arguments
ARG1=${1:-default1}
ARG2=${2:-default2}

# Pre-processing
BASEDIR=`dirname $0`
PROG=`basename $0`
TMPFILE=${BASEDIR}/tmp-${PROG}.$$
trap 'rm -f ${TMPFILE}; exit 1' 1 2 3 15

# Procedure
for i in ARG1 ARG2 BASEDIR PROG TMPDIR
do
 export $i
 env | grep \^$i=
 unset $i
done
echo TMPFILE=${TMPFILE}

touch ${TMPFILE}

# Post-processing
rm -f ${TMPFILE}

覚書

引数の処理

13〜14行目は、引数の処理です。 環境変数にマッピングすることで、後々引数の追加や並び順を変更したくなった場合、ここだけ直せば良いです。 引数が指定されない場合のデフォルト値を準備しておくと良いです。

基準ディレクトリ

17行目で$0のdirnameを基準のディレクトリとすると何かと便利です。 一時ファイルの作成場所や設定ファイルの読み込み先、入出力ファイルの場所は、すべてBASEDIRを基準とした相対パスにするとcronで実行した時にも正しく動きます。

一時ファイル

一時ファイルを使ったほうが処理がシンプルになることがあります。 19行目でBASEDIRに重複しないファイル名を作成します。 34行目で作成した一時ファイルを削除します。 20行目で強制的に終了した場合に一時ファイルが残らないようにクリーンナップ処理を宣言します。

0 件のコメント: