Книга: Искусство программирования на языке сценариев командной оболочки
Пример 12-18. Более "сложный" шифр
Пример 12-18. Более "сложный" шифр
#!/bin/bash
# crypto-quote.sh: Ограниченное шифрование
# Шифрование ограничивается простой заменой одних алфавитных символов другими.
# Результат очень похож на шифры-загадки
key=ETAOINSHRDLUBCFGJMQPVWZYXK
# Здесь, "key" -- ни что иное, как "перемешанный" алфавит.
# Изменение ключа "key" приведет к изменению шифра.
# Конструкция 'cat "$@"' позволяет вводить данные как со stdin, так и из файла.
# Если используется stdin, то ввод должен завершаться комбинацией Control-D.
# Иначе, в командной строке, сценарию должно быть передано имя файла.
cat "$@" | tr "a-z" "A-Z" | tr "A-Z" "$key"
# | в верхний регистр | шифрование
# Такой прием позволяет шифровать как символы в верхнем регистре, так и в нижнем.
# Неалфавитные символы остаются без изменений.
# Попробуйте зашифровать какой либо текст, например
# "Nothing so needs reforming as other people's habits."
# --Mark Twain
#
# Результат будет:
# "CFPHRCS QF CIIOQ MINFMBRCS EQ FPHIM GIFGUI'Q HETRPQ."
# --BEML PZERC
# Для дешифрации можно использовать следующую комбинацию:
# cat "$@" | tr "$key" "A-Z"
# Этот нехитрый шифр может быть "взломан" 12-ти летним ребенком
#+ с помощью карандаша и бумаги.
exit 0
Различные версии tr
Утилита tr имеет две, исторически сложившиеся, версии. BSD-версия не использует квадратные скобки (tr a-z A-Z), в то время как SysV-версия использует их (tr '[a-z]' '[A-Z]'). GNU-версия утилиты tr напоминает версию BSD, но диапазоны символов обязательно должны заключаться в квадратные скобки.
fold
Выравнивает текст по ширине, разрывая, если это необходимо, слова. Особый интерес представляет ключ -s, который производит перенос строк по пробелам, стараясь не разрывать слова. (см. Пример 12-19 и Пример A-2).
fmt
Очень простая утилита форматирования текста, чаще всего используемая как фильтр в конвейерах для того, чтобы выполнить "перенос" длинных строк текста.
Пример 12-19. Отформатированный список файлов.
#!/bin/bash
WIDTH=40 # 40 символов в строке.
b=`ls /usr/local/bin` # Получить список файлов...
echo $b | fmt -w $WIDTH
# То же самое можно выполнить командой
# echo $b | fold - -s -w $WIDTH
exit 0
См. также Пример 12-4.
col
Эта утилита с обманчивым названием удаляет из входного потока символы обратной подачи бумаги (код ESC 7). Она так же пытается заменить пробелы на табуляции. Основная область применения утилиты col -- фильтрация вывода отдельных утилит обработки текста, таких как groff и tbl.
column
Форматирование по столбцам. Эта утилита преобразует текст, например какой либо список, в табличное, более "удобочитаемое", представление, вставляя символы табуляции по мере необходимости.
- Пример 12-8. Частота встречаемости отдельных слов
- Пример 12-9. Какие из файлов являются сценариями?
- Пример 12-10. Генератор 10-значных случайных чисел
- Пример 12-11. Мониторинг системного журнала с помощью tail
- Пример 12-12. Сценарий-эмулятор "grep"
- Пример 12-13. Поиск слов в словаре
- Пример 12-14. toupper: Преобразование символов в верхний регистр.
- Пример 12-15. lowercase: Изменение имен всех файлов в текущем каталоге в нижний регистр.
- Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX.
- Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13.
- Пример 12-18. Более "сложный" шифр
- Пример 12-20. Пример форматирования списка файлов в каталоге
- Пример 12-21. nl: Самонумерующийся сценарий.
- Пример установочного скрипта
- Пример из практики
- Восстановление "безнадежных" баз данных. InterBase Surgeon
- Основные "рычаги" управления производительностью
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Примеры получения статистики
- Пример применения метода «пять почему»
- Пример 12-8. Частота встречаемости отдельных слов
- 1.2.5. Пример программы
- Using Double Quotes to Resolve Variables in Strings with Embedded Spaces
- Пример 17-10. Блочный комментарий
- Примеры