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

на главную - закладки

Жанры

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

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

Шрифт:

* явно или по оплошности. Так как некоторые пользователи обращаются к исходным текстам,

* они обязательно должны быть включены в документацию.

*

* 3. Измененная версия должна содержать явное упоминание об этом и не должна

* выдаваться за оригинал. Так как некоторые пользователи обращаются к исходным текстам,

* они обязательно должны быть включены в документацию.

*

* 4. Это соглашение не может удаляться и/или изменяться.

*/

+

Antek Sawicki предоставил

следующий сценарий, который демонстрирует операцию подстановки параметров, обсуждавшуюся в Section 9.3.

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

#!/bin/bash

# Для старых систем может потребоваться указать #!/bin/bash2.

#

# Генератор случайных паролей для bash 2.x

# Автор: Antek Sawicki <[email protected]>,

# который великодушно позволил использовать его в данном документе.

#

# ==> Комментарии, добавленные автором документа ==>

MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

LENGTH="8"

# ==> 'LENGTH' можно увеличить, для генерации более длинных паролей.

while [ "${n:=1}" -le "$LENGTH" ]

# ==> Напоминаю, что ":=" -- это оператор "подстановки значения по-умолчанию".

# ==> Таким образом, если 'n' не инициализирована, то в нее заносится 1.

do

PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"

# ==> Хитро, хитро....

# ==> Начнем с самых внутренних скобок...

# ==> ${#MATRIX} -- возвращает длину массива MATRIX.

# ==> $RANDOM%${#MATRIX} -- возвращает случайное число

# ==> в диапазоне 1 .. ДЛИНА_МАССИВА(MATRIX) - 1.

# ==> ${MATRIX:$(($RANDOM%${#MATRIX})):1}

# ==> возвращает символ из MATRIX, из случайной позиции (найденной выше).

# ==> См. подстановку параметров {var:pos:len} в Разделе 3.3.1

# ==> и примеры в этом разделе.

# ==> PASS=...
– - добавление символа к строке PASS, полученной на предыдущих итерациях.

# ==> Чтобы детальнее проследить ход работы цикла, раскомментируйте следующую строку

# ==> echo "$PASS"

# ==> Вы увидите, как на каждом проходе цикла,

# ==> к строке PASS добавляется по одному символу.

let n+=1

# ==> Увеличить 'n' перед началом следующей итерации.

done

echo "$PASS" # ==> Или перенаправьте в файл, если пожелаете.

exit 0

+

James R. Van Zandt

предоставил следующий сценарий, который демонстрирует применение именованных каналов, по его словам, "на самом деле -- упражнение на применение кавычек и на экранирование".

Пример A-17. fifo: Создание резервных копий с помощью именованных каналов

#!/bin/bash

# ==> Автор:James R. Van Zandt

# ==> используется с его разрешения.

# ==> Комментарии, добавленные автором документа.

HERE=`uname -n` # ==> hostname

THERE=bilbo

echo "начало создания резервной копии на $THERE, за `date +%r`"

# ==> `date +%r` возвращает время в 12-ти часовом формате, т.е. "08:08:34 PM".

# убедиться в том, что /pipe -- это действительно канал, а не простой файл

rm -rf /pipe

mkfifo /pipe # ==> Создание "именованного канала", с именем "/pipe".

# ==> 'su xyz' -- запускает команду от имени порльзователя "xyz".

# ==> 'ssh' -- вызов secure shell (вход на удаленную систему).

su xyz -c "ssh $THERE \"cat >/home/xyz/backup/${HERE}-daily.tar.gz\" < /pipe"&

cd /

tar -czf - bin boot dev etc home info lib man root sbin share usr var >/pipe

# ==> Именованный канал /pipe, используется для передачи данных между процессами:

# ==> 'tar/gzip' пишет в /pipe, а 'ssh' -- читает из /pipe.

# ==> В результате будет получена резервная копия всех основных каталогов.

# ==> В чем состоит преимущество именованного канала, в данной ситуации,

# ==> перед неименованным каналом "|" ?

# ==> Будет ли работать неименованный канал в данной ситуации?

exit 0

+

Stephane Chazelas предоставил следующий сценарий, который демонстрирует возможность генерации простых чисел без использования массивов.

Пример A-18. Генерация простых чисел, с использованием оператора деления по модулю (остаток от деления)

#!/bin/bash

# primes.sh: Генерация простых чисел, без использования массивов.

# Автор: Stephane Chazelas.

# Этот сценарий не использует класический алгоритм "Решето Эратосфена",

#+ вместо него используется более понятный метод проверки каждого кандидата в простые числа

#+ путем поиска делителей, с помощью оператора нахождения остатка от деления "%".

Поделиться:
Популярные книги

Моя на одну ночь

Тоцка Тала
Любовные романы:
современные любовные романы
короткие любовные романы
5.50
рейтинг книги
Моя на одну ночь

Черный Маг Императора 8

Герда Александр
8. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 8

Измена. Отбор для предателя

Лаврова Алиса
1. Отбор для предателя
Фантастика:
фэнтези
5.00
рейтинг книги
Измена. Отбор для предателя

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Шаг в бездну

Муравьёв Константин Николаевич
3. Перешагнуть пропасть
Фантастика:
фэнтези
космическая фантастика
7.89
рейтинг книги
Шаг в бездну

Часовая битва

Щерба Наталья Васильевна
6. Часодеи
Детские:
детская фантастика
9.38
рейтинг книги
Часовая битва

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Хроники странного королевства. Вторжение. (Дилогия)

Панкеева Оксана Петровна
110. В одном томе
Фантастика:
фэнтези
9.38
рейтинг книги
Хроники странного королевства. Вторжение. (Дилогия)

Часовой ключ

Щерба Наталья Васильевна
1. Часодеи
Фантастика:
фэнтези
9.36
рейтинг книги
Часовой ключ

Инвестиго, из медика в маги

Рэд Илья
1. Инвестиго
Фантастика:
фэнтези
городское фэнтези
попаданцы
5.00
рейтинг книги
Инвестиго, из медика в маги

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Очешуеть! Я - жена дракона?!

Амеличева Елена
Фантастика:
юмористическая фантастика
5.43
рейтинг книги
Очешуеть! Я - жена дракона?!

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9