LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

目的

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0