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

Здесь есть возможность читать онлайн «Мендель Купер - Искусство программирования на языке сценариев командной оболочки» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

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

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Искусство программирования на языке сценариев командной оболочки»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Данное руководство не предполагает наличие у читателя познаний в области программирования на языке сценариев, однако, быстро восполняет этот недостаток, постепенно, шаг за шагом раскрывая мудрость и красоту UNIX. Это руководство может рассматриваться как учебник, предназначенный для самостоятельного изучения или как справочник по программированию на shell. Руководство снабжено серией хорошо прокомментированных примеров, поскольку лучший путь к изучению языка сценариев -- это написание сценариев.

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Искусство программирования на языке сценариев командной оболочки», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

# Генерация случайных чисел в диапазоне 6 - 30.

rnumber=$((RANDOM%25+6))

# Генерируется случайное число из диапазона 6 - 30,

#+ но при этом число должно делиться на 3 без остатка.

rnumber=$(((RANDOM%30/3+1)*3))

# Упражнение: Попробуйте разобраться с выражением самостоятельно.

Насколько случайны числа, возвращаемые функцией $RANDOM? Лучший способ оценить "случайность" генерируемых чисел -- это написать сценарий, который будет имитировать бросание игрального кубика достаточно большое число раз, а затем выведет количество выпадений каждой из граней...

Пример 9-25. Имитация бросания кубика с помощью RANDOM

#!/bin/bash

# Случайные ли числа возвращает RANDOM?

RANDOM=$$ # Инициализация генератора случайных чисел числом PID процесса-сценария.

PIPS=6 # Кубик имеет 6 граней.

MAXTHROWS=600 # Можете увеличить, если не знаете куда девать свое время.

throw=0 # Счетчик бросков.

zeroes=0 # Обнулить счетчики выпадения отдельных граней.

ones=0 # т.к. неинициализированные переменные - "пустые", и не равны нулю!.

twos=0

threes=0

fours=0

fives=0

sixes=0

print_result ()

{

echo

echo "единиц = $ones"

echo "двоек = $twos"

echo "троек = $threes"

echo "четверок = $fours"

echo "пятерок = $fives"

echo "шестерок = $sixes"

echo

}

update_count()

{

case "$1" in

0) let "ones += 1";; # 0 соответствует грани "1".

1) let "twos += 1";; # 1 соответствует грани "2", и так далее

2) let "threes += 1";;

3) let "fours += 1";;

4) let "fives += 1";;

5) let "sixes += 1";;

esac

}

echo

while [ "$throw" -lt "$MAXTHROWS" ]

do

let "die1 = RANDOM % $PIPS"

update_count $die1

let "throw += 1"

done

print_result

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

# Для $MAXTHROWS = 600, каждая грань должна выпасть примерно 100 раз (плюс-минус 20).

#

# Имейте ввиду, что RANDOM - это генератор ПСЕВДОСЛУЧАЙНЫХ чисел,

# Упражнение:

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

# Перепишите этот сценарий так, чтобы он имитировал 1000 бросков монеты.

# На каждом броске возможен один из двух вариантов выпадения - "ОРЕЛ" или "РЕШКА".

exit 0

Как видно из последнего примера, неплохо было бы производить переустановку начального числа генератора случайных чисел RANDOM перед тем, как начать работу с ним. Если используется одно и то же начальное число, то генератор RANDOM будет выдавать одну и ту же последовательность чисел. (Это совпадает с поведением функции random() в языке C.)

Пример 9-26. Переустановка RANDOM

#!/bin/bash

# seeding-random.sh: Переустановка переменной RANDOM.

MAXCOUNT=25 # Длина генерируемой последовательности чисел.

random_numbers ()

{

count=0

while [ "$count" -lt "$MAXCOUNT" ]

do

number=$RANDOM

echo -n "$number "

let "count += 1"

done

}

echo; echo

RANDOM=1 # Переустановка начального числа генератора случайных чисел RANDOM.

random_numbers

echo; echo

RANDOM=1 # То же самое начальное число...

random_numbers # ...в результате получается та же последовательность чисел.

#

# В каких случаях может оказаться полезной генерация совпадающих серий?

echo; echo

RANDOM=2 # Еще одна попытка, но с другим начальным числом...

random_numbers # получим другую последовательность.

echo; echo

# RANDOM=$$ в качестве начального числа выбирается PID процесса-сценария.

# Вполне допустимо взять в качестве начального числа результат работы команд 'time' или 'date'.

# Немного воображения...

SEED=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }')

# Псевдослучайное число забирается

#+ из системного генератора псевдослучайных чисел /dev/urandom ,

#+ затем конвертируется в восьмеричное число командой "od",

#+ и наконец "awk" возвращает единственное число для переменной SEED.

RANDOM=$SEED

random_numbers

echo; echo

exit 0

картинка 54Системный генератор /dev/urandom дает последовательность псевдослучайных чисел с более равномерным распределением, чем $RANDOM . Команда dd if=/dev/urandom of=targetfile bs=1 count=XXсоздает файл, содержащий последовательность псевдослучайных чисел. Однако, эти числа требуют дополнительной обработки, например с помощью команды od (этот прием используется в примере выше) или dd (см. Пример 12-42).

Есть и другие способы генерации псевдослучайных последовательностей в сценариях. Awkимеет для этого достаточно удобные средства.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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

Представляем Вашему вниманию похожие книги на «Искусство программирования на языке сценариев командной оболочки» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


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

Обсуждение, отзывы о книге «Искусство программирования на языке сценариев командной оболочки» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x