# 1) Добавьте возможность ввода суммы с точностью до цента.
# 2) Добавьте возможность ввода процентной ставки как в виде процентов, так и в виде десятичного числа -- доли целого.
# 3) Если вы действительно честолюбивы,
# добавьте в сценарий вывод полной таблицы помесячных выплат.
Пример 12-33. Перевод чисел из одной системы счисления в другую
##########################################################################
# Shellscript: base.sh - вывод чисел в разных системах счисления (Bourne Shell)
# Author : Heiner Steven (heiner.steven@odn.de)
# $Id: base.sh,v 1.2 2000/02/06 19:55:35 heiner Exp $
##########################################################################
# 21-03-95 stv исправлена ошибка, возникающая при вводе числа 0xb (0.2)
##########################################################################
# ==> Используется в данном документе с разрешения автора.
# ==> Комментарии добавлены автором документа.
PN=`basename "$0"` # Имя программы
VER=`echo '$Revision: 1.2 $' | cut -d' ' -f2` # ==> VER=1.2
echo "$PN - вывод чисел в различных системах счисления, $VER (stv '95)
Порядок использования: $PN [number ...]
Если число не задано, то производится ввод со stdin.
двоичное должно начинаться с комбинации символов 0b (например 0b1100)
восьмеричное должно начинаться с 0 (например 014)
шестнадцатиричное должно начинаться с комбинации символов 0x (например 0xc)
десятичное в любом другом случае (например 12)" >&2
} # ==> Функция вывода сообщения о порядке использования.
for i # ==> [список] параметров опущен.
Fatal () { Msg "$@"; exit 66; }
# Определение системы счисления
for i # ==> [список] параметров опущен...
do # ==> поэтому работает с аргументами командной строки.
0b*) ibase=2;; # двоичная
0x*|[a-f]*|[A-F]*) ibase=16;; # шестнадцатиричная
0*) ibase=8;; # восьмеричная
[1-9]*) ibase=10;; # десятичная
Msg "Ошибка в числе $i - число проигнорировано"
# Удалить префикс и преобразовать шестнадцатиричные цифры в верхний регистр (этого требует bc)
number=`echo "$i" | sed -e 's:^0[bBxX]::' | tr '[a-f]' '[A-F]'`
# ==> вместо "/", здесь используется символ ":" как разделитель для sed.
# Преобразование в десятичную систему счисления