Usando o bash
Para gerar um número par aleatório em hexadecimal:
$ printf '%x\n' $((2*$RANDOM))
d056
Ou:
$ hexVal=$(printf '%x\n' $((2*$RANDOM)))
$ echo $hexVal
f58a
Para limitar a saída a números menores, use modulo, %
:
$ printf '%x\n' $(( 2*$RANDOM % 256 ))
4a
Usando o openssl
Se você realmente quiser usar uma solução de loop com openssl
:
while hexVal="$(openssl rand -hex 1)"
do
((0x$hexVal % 2 == 0)) && break
done
O 0x
indica que o número a seguir é hexadecimal.
Regras para lançar números no bash
De man bash
:
Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in that base. If base# is omitted, then base 10 is used. When specifying n, the digits greater< than 9 are represented by the lowercase letters, the uppercase letters, @, and _, in that order. If base is less than or equal to 36, lowercase and uppercase letters may be used interchangeably to represent numbers between 10 and 35. [Emphasis added]