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


Программирование на языке сценариев командной оболочки - стр. 305


echo echo "C($h) --- $MAX_ITERATIONS итераций" echo

for ((i=1; i<=MAX_ITERATIONS; i++)) do

echo -n "$h " # ^^^^^ # табуляция

let "remainder = h % 2" if [ "$remainder" -eq 0 ] # Четное? then let "h /= 2" # Разделить на 2. else let "h = h*3 + 1" # Умножить на 3 и прибавить 1. fi

COLUMNS=10 # Выводить по 10 значений в строке. let "line_break = i % $COLUMNS" if [ "$line_break" -eq 0 ] then echo fi

done

echo

exit 0

Пример A-8. days-between: Подсчет числа дней между двумя датами

#!/bin/bash # days-between.sh: Подсчет числа дней между двумя датами. # Порядок использования: ./days-between.sh [M]M/[D]D/YYYY [M]M/[D]D/YYYY

ARGS=2 # Ожидается два аргумента из командной строки. E_PARAM_ERR=65 # Ошибка в числе ожидаемых аргументов.

REFYR=1600 # Начальный год. CENTURY=100 DIY=365 ADJ_DIY=367 # Корректировка на високосный год + 1. MIY=12 DIM=31 LEAPCYCLE=4

MAXRETVAL=255 # Максимально возможное возвращаемое значение # для положительных чисел.

diff= # Количество дней между датами. value= # Абсолютное значение. day= # день, месяц, год. month= year=

Param_Error () # Ошибка в пвраметрах командной строки. { echo "Порядок использования: `basename $0` [M]M/[D]D/YYYY [M]M/[D]D/YYYY" echo " (даты должны быть после 1/3/1600)" exit $E_PARAM_ERR }

Parse_Date () # Разбор даты. { month=${1%%/**} dm=${1%/**} # День и месяц. day=${dm#*/} let "year = `basename $1`" # Хотя это и не имя файла, но результат тот же. }

check_date () # Проверка даты. { [ "$day" -gt "$DIM" ] || [ "$month" -gt "$MIY" ] || [ "$year" -lt "$REFYR" ] && Param_Error # Выход из сценария при обнаружении ошибки. # Используется комбинация "ИЛИ-списка / И-списка". # # Упражнение: Реализуйте более строгую проверку даты. }

strip_leading_zero () # Удалить ведущий ноль { val=${1#0} # иначе Bash будет считать числа return $val # восьмеричными (POSIX.2, sect 2.9.2.1). }




Начало  Назад  Вперед



Книжный магазин