#!/usr/bin/env bash yell() { echo "$0: $*" >&2; } # print script path and all args to stderr die() { yell "$*"; exit 111; } # same as yell() but non-zero exit status try() { "$@" || die "cannot $*"; } # runs args as command, reports args if command fails check_resembles_gpg_fingerprint() { # Desc: Checks if input string looks like gpg fingerprint # Usage: check_resembles_gpg_fingerprint arg1 # Input: arg1: string # Output: exit code: 0 if arg1 is fingerprint, 1 otherwise # Depends: yell(), die(), try() # Version: 0.0.1 local pattern1 pattern2 input input_length # Check args if [[ $# -ne 1 ]]; then die "ERROR:Invalid number of arguments:$#"; else input="$1"; fi; ## Trim leading `0x` pattern1="(0x)(.*)"; if [[ $input =~ $pattern1 ]]; then input="${input:2}"; #yell "DEBUG:input:$input"; fi; ## Check if char count multiple of 8 input_length="${#input}"; if [[ ! $(( input_length % 8 )) -eq 0 ]]; then yell "DEBUG:Length not a multiple of 8:$input_length:$input"; return 1; fi; ## Check if hexadecimal pattern2="[0-9A-Fa-f]{8,40}"; if [[ $1 =~ $pattern2 ]]; then #yell "DEBUG:is a fingerprint:$arg"; return 0; else #yell "DEBUG:Not a fingerprint:$arg"; return 1; fi; }; # Checks if input string looks like gpg fingerprint # test code myVar="0xdc3469c9"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi; myVar="69B4C4CDC628F8F9"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi; myVar="26646D99CBAEC9B81982EF6029D9EE6B1FC730C1"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi; myVar="deadbeef"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi; myVar="foobar"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi; myVar="zzzzzzzz"; if check_resembles_gpg_fingerprint "$myVar"; then yell "Looks like a gpg fingerprint:$myVar"; else yell "Doesn't look like a gpg fingerprint:$myVar"; fi;