Utilisez l'expansion des paramètres. ${#chars}
est le nombre de caractères possibles, %
est l'opérateur modulo. ${chars:offset:length}
sélectionne le(s) caractère(s) à la position offset
, c'est-à-dire 0 - longueur($chars) dans notre cas.
chars=abcd1234ABCD
for i in {1..8} ; do
echo -n "${chars:RANDOM%${#chars}:1}"
done
echo
Une autre façon de générer une chaîne hexadécimale de 32 octets (par exemple) :
xxd -l 32 -c 32 -p < /dev/random
ajouter -u
si vous voulez des caractères majuscules à la place.
Pour ceux qui recherchent une chaîne alphanumérique aléatoire dans bash :
LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c 64
La même chose qu'une fonction bien documentée :
function rand-str {
# Return random alpha-numeric string of given LENGTH
#
# Usage: VALUE=$(rand-str $LENGTH)
# or: VALUE=$(rand-str)
local DEFAULT_LENGTH=64
local LENGTH=${1:-$DEFAULT_LENGTH}
LC_ALL=C tr -dc A-Za-z0-9 </dev/urandom | head -c $LENGTH
# LC_ALL=C: required for Mac OS X - https://unix.stackexchange.com/a/363194/403075
# -dc: delete complementary set == delete all except given set
}