Как сгенерировать строку n (ie. Двадцать) из шаблона? - PullRequest
1 голос
/ 27 мая 2020

Теперь я использую этот код

tr -dc 'A-X0-9' < /dev/urandom | head -c12 > test.txt

и работает нормально, но генерирует только одну строку без какого-либо шаблона.

Как изменить эту строку на сгенерировать строку n (ie. двадцать), начинающуюся с: "MyPassword", а затем 12 сгенерированных цифр?

спасибо!

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Если 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, преобразующий случайные числа в случайные символы.
1 голос
/ 27 мая 2020

Один хорошо понятный подход:

#!/bin/bash
#      ^^^^- NOT /bin/sh

num_chars=12
num_strings=20

for ((i=0; i<num_strings; i++)); do
  IFS= read -r -d '' -n "$num_chars" chars && [[ $chars ]] || break
  printf 'MyPassword%s\n' "$chars"
done < <(tr -dc 'A-X0-9' < /dev/urandom)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...