From b12c68ddfb2ab5b209813f72da8916191ed0a62f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernhard=20Rosenkr=C3=A4nzer?= Date: Mon, 16 Dec 2024 20:52:50 +0100 Subject: [PATCH] Add helpers script (currently useful for generating UUIDs for the plane database) --- lib/helpers.sh | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 lib/helpers.sh diff --git a/lib/helpers.sh b/lib/helpers.sh new file mode 100644 index 0000000..7e728f2 --- /dev/null +++ b/lib/helpers.sh @@ -0,0 +1,61 @@ +# Helper functions that can be useful for multiple scripts + +# random: Create a random string in a specified format +# Usage: random format +# Where format is a string to be transformed into a random sequence: +# 0 - transformed into a digit (0-9) +# x - transformed into a lower case hexadecimal digit (0-9, a-f) +# X - transformed into an upper case hexadecimal digit (0-9, A-F) +# a - transformed into a lower case letter (a-z) +# A - transformed into an upper case letter (A-Z) +# l - transformed into a letter (upper or lower case) (a-z, A-Z) +# L - transformed into a letter (upper or lower case) or number (a-z, A-Z, 0-9) +# \ - skipped; next character is not transformed +# anything else - kept as is +# e.g. to create a plane UUID, use +# random +random() { + local TEMPLATE="$1" + local RESULT="" + local KEEPNEXT=false + local ADD + for i in $(echo $TEMPLATE |fold -w1); do + if $KEEPNEXT; then + RESULT="$RESULT$i" + KEEPNEXT=false + continue + fi + case "$i" in + x) + ADD="$(echo $((RANDOM%16))|xargs printf '%x')" + ;; + X) + ADD="$(echo $((RANDOM%16))|xargs printf '%X')" + ;; + 0) + ADD="${RANDOM:0:1}" + ;; + a) + ADD="$(head -n1 /dev/urandom |tr -dc a-z |cut -b1)" + ;; + A) + ADD="$(head -n1 /dev/urandom |tr -dc A-Z |cut -b1)" + ;; + l) + ADD="$(head -n1 /dev/urandom |tr -dc a-zA-Z |cut -b1)" + ;; + L) + ADD="$(head -n1 /dev/urandom |tr -dc a-zA-Z0-9 |cut -b1)" + ;; + "\\") + KEEPNEXT=true + continue + ;; + *) + ADD="$i" + ;; + esac + RESULT="$RESULT$ADD" + done + echo -n $RESULT +}