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




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


day_index () # Формула Гаусса: { # Количество дней от 3 Янв. 1600 до заданной даты.

day=$1 month=$2 year=$3

let "month = $month - 2" if [ "$month" -le 0 ] then let "month += 12" let "year -= 1" fi

let "year -= $REFYR" let "indexyr = $year / $CENTURY"

let "Days = $DIY*$year + $year/$LEAPCYCLE - $indexyr + $indexyr/$LEAPCYCLE + $ADJ_DIY*$month/$MIY + $day - $DIM" # Более подробное объяснение алгоритма вы найдете в # http://home.t-online.de/home/berndt.schwerdtfeger/cal.htm

if [ "$Days" -gt "$MAXRETVAL" ] # Если больше 255, then # то поменять знак let "dindex = 0 - $Days" # чтобы функция смогла вернуть полное значение. else let "dindex = $Days" fi

return $dindex

}

calculate_difference () # Разница между двумя датами. { let "diff = $1 - $2" # Глобальная переменная. }

abs () # Абсолютное значение { # Используется глобальная переменная "value". if [ "$1" -lt 0 ] # Если число отрицательное then # то let "value = 0 - $1" # изменить знак, else # иначе let "value = $1" # оставить как есть. fi }

if [ $# -ne "$ARGS" ] # Требуется два аргумента командной строки. then Param_Error fi

Parse_Date $1 check_date $day $month $year # Проверка даты.

strip_leading_zero $day # Удалить ведущие нули day=$? # в номере дня и/или месяца. strip_leading_zero $month month=$?

day_index $day $month $year date1=$?

abs $date1 # Абсолютное значение date1=$value

Parse_Date $2 check_date $day $month $year

strip_leading_zero $day day=$? strip_leading_zero $month month=$?

day_index $day $month $year date2=$?

abs $date2 # Абсолютное значение date2=$value

calculate_difference $date1 $date2

abs $diff # Абсолютное значение diff=$value

echo $diff

exit 0 # Сравните этот сценарий с реализацией формулы Гаусса на C # http://buschencrew.hypermart.net/software/datedif

Пример A-9. Создание "словаря"

#!/bin/bash # makedict.sh [создание словаря]




Содержание  Назад  Вперед