Теперь рассмотрим сценарий, генерирующий пароль любой заданной длины, в сим-волах ASCII:

#!/bin/bash n»"Sl" [[ -п "$n" ]] 11 п-12 if [[ Sn -It 8 ]]: then echo "A password of length $n would be too weak" exit 1

fi
p=$( dd if=/dev/urandom bs=512 count=l 2>/dev/null \ | tr -cd 'a-zA-ZO-9' \ I cut -c l-$n ) echo "${p}"
Этот код — как раз то, что вы обычно получаете от разработчика: нет коммента-риев, бесполезные имена переменных и какие-то магические заклинания. И если
вы хотите сделать мир лучше, то есть несколько вещей, которые вы можете сделать, создавая подобные сценарии.
В самом конце вы можете оставить комментарии, описывающие цель кода. Эти комментарии нужно разбить на две части: обзор в верхнем колонтитуле (напри-мер, что должны указывать аргументы, задаваемые в сценарии, и все значения по умолчанию) и выразительные объяснения сложных для понимания процессов. Не теряйте времени па просмотр используемых базовых команд, поскольку спе-циалист, оказывающий поддержку, может найти их, даже не будучи с ними знаком. Однако там, где вы применяете более экзотический вариант команды, вы должны выразительно описать получаемый эффект и способы его достижения.
Прежде всего вы должны задокументировать результаты, которые ищете с по-мощью командных настроек, и установить, почему вы желаете достичь поставлен-ных вами целей таким образом.
В этом приложении вы найдете объяснение кода генератора паролей, которое вряд ли встретите в деталях на практике. Сценарий начинается с обычного стар-тового комментария, который приказывает системе запустить интерпретатор bash. Далее мы присваиваем переменной п первую последовательность символов аргу-мента, которая будет означать количество генерируемых символов. Мы указываем ее в кавычках, так как последовательность символов может быть нулевой, если сценарий работает без аргументов. Такая строка применяется для проверки, не используется ли именно в данном случае ноль. Аргумент -п означает «нулевую длину», и если дана такая последовательность, то испытание истинно.
Код за двумя вертикальными чертами будет работать, если испытание не удаст-ся. Это обуславливает для вашего пароля длину по умолчанию, равную 12 симво-лам. В следующих четырех строках проверяется, является ли заданная длина слиш-ком малой. Мы решили (основываясь на классических рекомендациях экспертов по безопасности), что минимальная длина должна равняться 8.
Первая задача в теле цикла использует три системные команды для генериро-вания пробного пароля. Все три строки помещены в $ ( ) для передачи вывода как последовательности символов, которая затем присваивается переменной р.
Для генерирования случайного пароля нам необходим набор случайных дан-ных: система получает его комбинированием нескольких источников статистики на псевдоустройстве /dev/urandom. Команда dd считывает с устройства бинарные данные. Команда tr с параметром -cd удаляет все символы, не входящие в области a-z, A-Z и 0-9. Последняя команда — cut — извлекает желаемое количество сим-волов.
Не пытайтесь выполнить эту команду в своей консоли и увидеть результаты на экране. 1>*' * Вы можете применить команду stty sane для восстановления полезного состояния экрана,