Если awk
- ваш вариант, попробуйте:
awk '
BEGIN {
len = split("ABCDEFGHIJKLMNOPQRSTUVWX0123456789", ary, "")
for (i = 0; i < 20; i++) {
str = ""
for (j = 0; j < 12; j++) {
str = str ary[int(rand() * len + 1)]
}
print "MyPassword" str
}
}
'
- Сначала он генерирует массив
ary
, содержащий символы от A
до 9
. - Значение
int(rand() * len + 1)
случайным образом индексирует символ в массиве. - Самый внутренний l oop повторяется 12 раз для объединения 12 случайных символов.
[Обновление]
Если вы предпочитаете использовать /dev/urandom
из-за его хорошей природы случайности, попробуйте вместо этого:
digit=12 # number of characters
number=20 # number of repetitions
awk -v digit="$digit" '
BEGIN {
len = split("ABCDEFGHIJKLMNOPQRSTUVWX0123456789", ary, "")
}
{
str = str ary[int(($0 / 2 ** 16) * len + 1)]
if (++c >= digit) {
print "MyPassword" str
str = ""
c = 0
}
}
' < <(od -vAn --width=2 -tu2 -N$(( digit * number * 2)) < /dev/urandom)
- Он генерирует последовательность из 16 -битовые случайные целые числа с использованием
/dev/urandom
и od
. - Затем результат
od
передается в сценарий awk
, преобразующий случайные числа в случайные символы.