+#!/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_gpg_fingerprint() {
+ # Desc: Checks if input string looks like gpg fingerprint
+ # Usage: check_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="$(echo "$input" | sed 's/^..//')";
+ #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_gpg_fingerprint "$myVar"; then
+ yell "Looks like a gpg fingerprint:$myVar";
+else
+ yell "Doesn't look like a gpg fingerprint:$myVar";
+fi;