Posted at

Linux ubuntu bash diffを使わない引数でファイルパスを与え 該当ファイルの内容が一致しているかを確認する


目的


  • 職場の先輩の思いつきで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