70 lines
2.1 KiB
Bash
70 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
# file paths
|
|
sha256_file_path=./checksums.sha256
|
|
md5_file_path=./checksums.md5
|
|
error_log=./checksums_error.log
|
|
|
|
# text colors
|
|
RED='\e[31m'
|
|
GREEN='\e[32m'
|
|
RESET='\e[0m'
|
|
|
|
# set these false at the start to be safe
|
|
checksha256=false
|
|
checkmd5=false
|
|
|
|
# output errors to error log
|
|
exec 2> >(tee -a "$error_log" >&2)
|
|
|
|
# environment checks
|
|
## check for presence of $sha256_file_path, fail with general error on error
|
|
if [ ! -f "$sha256_file_path" ]; then
|
|
echo -e "\n${RED}FAIL!${RESET} File $sha256_file_path Not Found!\n" >&2
|
|
exit 1
|
|
fi
|
|
## check if $sha256_file_path is writable
|
|
if [ ! -r "$sha256_file_path" ]; then
|
|
echo -e "\n${RED}FAIL!${RESET} File $sha256_file_path Exists But Not Readable!\n" >&2
|
|
exit 1
|
|
fi
|
|
## check for presence of $md5_file_path, fail with general error on error
|
|
if [ ! -f "$md5_file_path" ]; then
|
|
echo -e "\nFAIL! File $md5_file_path Not Found!\n" >&2
|
|
exit 1
|
|
fi
|
|
## check if $md5_file_path is writable
|
|
if [ ! -r "$md5_file_path" ]; then
|
|
echo -e "\n${RED}FAIL!${RESET} File $md5_file_path Exists But Not Readable!\n" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# check checksums
|
|
## check sha256
|
|
if sha256sum -c "$sha256_file_path" 1>/dev/null; then
|
|
echo -e "SHA256 Checksums: ${GREEN}OK!${RESET}"
|
|
checksha256=true
|
|
else
|
|
echo -e "\n\nSHA256 Checksums: ${RED}BAD!${RESET}\nDumping SHA256 Checksum Fails:" >&2
|
|
sha256sum -c "$sha256_file_path" | grep 'FAILED' >&2
|
|
echo -e "\nSHA256 Checksums: ${RED}BAD!${RESET}\n" >&2
|
|
fi
|
|
## check md5
|
|
if md5sum -c "$md5_file_path" 1>/dev/null; then
|
|
echo -e "MD5 checksums: ${GREEN}OK!${RESET}"
|
|
checkmd5=true
|
|
else
|
|
echo -e "\n\nFAIL: MD5 Checksums: ${RED}BAD!${RESET}\n\tDumping MD5 Checksum Fails:" >&2
|
|
md5sum -c "md5_file_path" | grep 'FAILED' >&2
|
|
echo -e "\nMD5 Checksums: ${RED}BAD!${RESET}\n" >&2
|
|
fi
|
|
|
|
# tally checks
|
|
if [[ $checksha256 == true && $checkmd5 == true ]]; then
|
|
echo -e "\nFile Integrity: VERIFIED! All Checksums: ${GREEN}OK!${RESET}\n"
|
|
exit 0 # exit success
|
|
else
|
|
echo -e "\nFile Integrity Check: ${RED}FAILED!${RESET}\n\tSee Above or See $error_log" >&2
|
|
exit 1 # exit general failure
|
|
fi
|