Пример A-16. password: Генератор случайного 8-ми символьного пароля

Пример A-16. password: Генератор случайного 8-ми символьного пароля

  1. #!/bin/bash
  2. # Для старых систем может потребоваться указать  #!/bin/bash2.
  3. #
  4. # Генератор случайных паролей для bash 2.x
  5. # Автор: Antek Sawicki <tenox@tenox.tc>,
  6. # который великодушно позволил использовать его в данном документе.
  7. #
  8. # ==> Комментарии, добавленные автором документа ==>
  9. MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
  10. LENGTH="8"
  11. # ==> 'LENGTH' можно увеличить, для генерации более длинных паролей.
  12. while [ "${n:=1}" -le "$LENGTH" ]
  13. # ==> Напоминаю, что ":=" — это оператор "подстановки значения по-умолчанию".
  14. # ==> Таким образом, если 'n' не инициализирована, то в нее заносится 1.
  15. do
  16.         PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
  17.         # ==> Хитро, хитро....
  18.         # ==> Начнем с самых внутренних скобок...
  19.         # ==> ${#MATRIX} — возвращает длину массива MATRIX.
  20.         # ==> $RANDOM%${#MATRIX} — возвращает случайное число
  21.         # ==> в диапазоне 1 .. ДЛИНА_МАССИВА(MATRIX) - 1.
  22.         # ==> ${MATRIX:$(($RANDOM%${#MATRIX})):1}
  23.         # ==> возвращает символ из MATRIX, из случайной позиции (найденной выше).
  24.         # ==> См. подстановку параметров {var:pos:len} в Разделе 3.3.1
  25.         # ==> и примеры в этом разделе.
  26.         # ==> PASS=... — добавление символа к строке PASS, полученной на предыдущих итерациях.
  27.         # ==> Чтобы детальнее проследить ход работы цикла, раскомментируйте следующую строку
  28.         # ==>             echo "$PASS"
  29.         # ==> Вы увидите, как на каждом проходе цикла,
  30.         # ==> к строке PASS добавляется по одному символу.
  31.         let n+=1
  32.         # ==> Увеличить 'n' перед началом следующей итерации.
  33. done
  34. echo "$PASS"      # ==> Или перенаправьте в файл, если пожелаете.
  35. exit 0