目的
- 職場の先輩の思いつきでShellScriptのbashのコーディングを練習した時のコードを展開する。
処理概要
- 引数1と引数2のファイル内容を比較する
処理詳細条件
- ファイルパスを引数で受け取る
- 二つのファイルの内容が同じ場合OKを出力
- 異なる場合はNGとだけ標準エラー出力で出力
- ファイルが存在しない場合「Not found:[ファイル名]」と標準エラー出力に出力、戻り値を前述のエラーとは別にする
- diff/cmpを使用しないで実施
- 実行マシンでは
crc32
コマンドが実行できる環境である
書き方の例
path1=${1}
path2=${2}
if [[ ! -f ${path1} ]] ; them
echo "Not found:" ${path1} 1>&2
check=1
fi
if [[ ! -f ${path2} ]] ; them
echo "Not found:" ${path2} 1>&2
check=1
fi
if [[ ${check} = 1 ]] ; them
exit 1
fi
CRC32_path1=`crc32 ${path1}`
CRC32_path1=`crc32 ${path2}`
if [[ ${CRC32_path1} = ${CRC32_path2} ]] ; then
echo "OK"
else
echo "NG" 1>&2
exit 2
fi
exit 0
処理の解説
# 引数1(ファイルパス1)を変数path1に格納
path1=${1}
# 引数2(ファイルパス2)を変数path2に格納
path2=${2}
# もしpath1に格納された値がファイルではなかったら
if [[ ! -f ${path1} ]] ; them
# 「Not found: path1に格納された値」と標準エラー出力でコンソールに出力する
echo "Not found:" ${path1} 1>&2
# この先での処理抜け判定で使用する値を変数checkに格納
check=1
fi
# もしpath2に格納された値がファイルではなかったら
if [[ ! -f ${path2} ]] ; them
# 「Not found: path2に格納された値」と標準エラー出力でコンソールに出力する
echo "Not found:" ${path2} 1>&2
# この先での処理抜け判定で使用する値を変数checkに格納
check=1
fi
# もし変数checkに1が格納されていたら
if [[ ${check} = 1 ]] ; them
# 戻り値1を保持して処理を終了する
exit 1
fi
# 変数path1に格納された値のCRC32の値を取得し結果を変数CRC32_path1に格納する
CRC32_path1=`crc32 ${path1}`
# 変数path2に格納された値のCRC32の値を取得し結果を変数CRC32_path2に格納する
CRC32_path2=`crc32 ${path2}`
# もし変数CRC32_path1に格納されている値と変数CRC32_path2も格納されている値が一致していたら
if [[ ${CRC32_path1} = ${CRC32_path2} ]] ; then
# 真の時、コンソールにOKと出力する
echo "OK"
else
# 偽の時、「NG」と標準エラー出力でコンソールに出力する
echo "NG" 1>&2
# 戻り値2を保持して処理を終了する
exit 2
fi
# 戻り値0を保持して処理を終了する
exit 0