Чтение онлайн

ЖАНРЫ

Искусство программирования на языке сценариев командной оболочки

Купер Мендель

Шрифт:

then

echo "Порядок использования: `basename $0` filename"

exit $E_BADARGS

fi

tr a-z A-Z <"$1"

# Тот же эффект можно получить при использовании символьных классов POSIX:

# tr '[:lower:]' '[:upper:]' <"$1"

# Спасибо S.C.

exit 0

Пример 12-15. lowercase:

Изменение имен всех файлов в текущем каталоге в нижний регистр.

#! /bin/bash

#

# Изменит все имена файлов в текущем каталоге в нижнй регистр.

#

for filename in * # Обход всех файлов в каталоге.

do

fname=`basename $filename`

n=`echo $fname | tr A-Z a-z` # Перевести символы в нижний регистр.

if [ "$fname" != "$n" ] # Переименовать только те файлы, имена которых изменились.

then

mv $fname $n

fi

done

exit 0

# Сироки приведенные ниже не будут исполняться, поскольку выше стоит команда "exit".

#--------------------------------------------------------#

# Запустите эту часть сценария, удалив строки , стоящие выше.

# Сценарий, приведенный выше, не работает с именами файлов, содержащими пробелы или символы перевода строки.

# В связи с этим, Stephane Chazelas предложил следующий вариант:

for filename in * # Нет необходимости использовать basename,

# поскольку "*" возвращает имена, не содержащие "/".

do n=`echo "$filename/" | tr '[:upper:]' '[:lower:]'`

# символьные классы POSIX.

# Завершающий слэш добавлен для того, чтобы символ перевода строки

# не был удален при подстановке команды.

# Подстановка переменной:

n=${n%/} # Удаление завершающего слэша, добавленного выше.

[[ $filename == $n ]] || mv "$filename" "$n"

# Проверка -- действительно ли изменилось имя файла.

done

exit 0

Пример 12-16. du: Преобразование текстового файла из формата DOS в формат UNIX.

#!/bin/bash

# du.sh:

Преобразование текстового файла из формата DOS в формат UNIX.

E_WRONGARGS=65

if [ -z "$1" ]

then

echo "Порядок использования: `basename $0` filename-to-convert"

exit $E_WRONGARGS

fi

NEWFILENAME=$1.unx

CR='\015' # Возврат каретки.

# Строки в текстовых файлах DOS завершаются комбинацией символов CR-LF.

tr -d $CR < $1 > $NEWFILENAME

# Удалить символы CR и записать в новый файл.

echo "Исходный текстовый файл: \"$1\"."

echo "Преобразованный файл: \"$NEWFILENAME\"."

exit 0

Пример 12-17. rot13: Сверхслабое шифрование по алгоритму rot13.

#!/bin/bash

# rot13.sh: Классический алгоритм шифрования rot13,

# который способен "расколоть" даже 3-х летний ребенок.

# Порядок использования: ./rot13.sh filename

# или ./rot13.sh <filename

# или ./rot13.sh и ввести текст с клавиатуры (stdin)

cat "$@" | tr 'a-zA-Z' 'n-za-mN-ZA-M' # "a" заменяется на "n", "b" на "o", и т.д.

# Конструкция 'cat "$@"'

#+ позволяет вводить данные как со stdin, так и из файла.

exit 0

Пример 12-18. Более "сложный" шифр

#!/bin/bash

# crypto-quote.sh: Ограниченное шифрование

# Шифрование ограничивается простой заменой одних алфавитных символов другими.

# Результат очень похож на шифры-загадки

key=ETAOINSHRDLUBCFGJMQPVWZYXK

# Здесь, "key" -- ни что иное, как "перемешанный" алфавит.

# Изменение ключа "key" приведет к изменению шифра.

# Конструкция 'cat "$@"' позволяет вводить данные как со stdin, так и из файла.

# Если используется stdin, то ввод должен завершаться комбинацией Control-D.

Поделиться с друзьями: