function verify_file if test (count $argv) -ne 2 echo "Usage: verify_file " return 1 end set file $argv[1] if not test -f "$file" echo "verify_file: '$file' is not a valid file" return 1 end set expected $argv[2] set len (string length "$expected") switch $len case 32 set cmd md5sum case 40 set cmd sha1sum case 56 set cmd sha224sum case 64 set cmd sha256sum case 96 set cmd sha384sum case 128 if command -q sha512sum set cmd sha512sum else if command -q b2sum set cmd b2sum else echo "verify_file: no tool available for 128-char hash (sha512sum or b2sum required)" return 1 end case '*' echo "verify_file: unknown hash length ($len chars). Supported: md5(32), sha1(40), sha224(56), sha256(64), sha384(96), sha512/b2(128)" return 1 end if not command -q $cmd echo "verify_file: '$cmd' is not installed." return 1 end set actual ($cmd "$file" | string split -f1 " ") if test "$actual" = "$expected" echo "Match" return 0 else echo "Mismatch" return 1 end end