freebsd

Генерация случайного числа в sh

Для Linux проблема получения случайного числа в скрипте решается переменной $RANDOM, которая специфична для bash и ряда других оболочек. Для FreeBSD с sh все несколько сложнее. Есть несколько решений, например в awk есть функция rand(). Но работа с awk мне не понравилась, так что пойдем другим путем. Получилось так, что мне нужно было получить число из промежутка от 1 до 3. Эту задачу и будем решать:

get_random_number()
{
        local upper=3
        local lower=1
        local random=`/usr/bin/head -n 1 /dev/random | cksum | cut -f1 -d" " | sed 's/^.*\([0-9]\).*/\1/'`
        if [ $random -le $upper ] && [ $random -ge $lower ]; then
                echo $random
                return 0
        else
                get_random_number
        fi
}

/dev/random генерирует для нас произвольные байты, далее подсчитывается их cksum, из него берем одну цифру. Если попадает в нужный диапазон – выходим, если нет запускаем функцию еще раз.

Tags: , ,

Вторник, Март 30th, 2010 Советы Нет комментариев
Tinkerbell Personal Checks |Garden Planters | Jewellery For Women | Best Dog Foods | Budget Wedding Gowns | Shop For Jewellery | Vintage Jewellery| Diamante Jewellery | Car Finance Credit | DoorStep Loans