62 lines
1.5 KiB
Bash
62 lines
1.5 KiB
Bash
# 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
|
|
}
|