bash$ tput longname
xterm terminal emulator (XFree86 4.0 Window System)
Команда tput cup X Yперемещает курсор в координаты (X,Y). Обычно этой команде предшествует clear, очищающая экран.
Обратите внимание: stty предлагает более широкий диапазон возможностей.
infocmp
Cравнение или печать информации о характеристиках терминалов, хранящейся в базе данных terminfo .
bash$ infocmp
# Reconstructed via infocmp from file:
/usr/share/terminfo/r/rxvt
rxvt|rxvt terminal emulator (X Window System),
am, bce, eo, km, mir, msgr, xenl, xon,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m,
civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
...
reset
Сбрасывает настройки терминала и очищает экран. Как и в случае команды clear, курсор и приглашение к вводу (prompt) выводятся в верхнем левом углу терминала.
clear
Команда clearпросто очищает экран терминала или окно xterm. Курсор и приглашение к вводу (prompt) выводятся в верхнем левом углу терминала. Эта команда может запускаться как из командной строки, так и из сценария. См. Пример 10-25.
script
Эта утилита позволяет сохранять в файле все символы, введенные пользователем c клавиатуры (вывод тоже). Получая, фактически, подробнейший синхронный протокол сессии.
12.8. Команды выполнения математических операций
factor
Разложение целого числа на простые множители.
bash$ factor 27417
27417: 3 13 19 37
bc
Bash не в состоянии выполнять действия над числами с плавающей запятой и не содержит многих важных математических функций. К счастью существует bc.
Универсальная, выполняющая вычисления с произвольной точностью, утилита bcобладает некоторыми возможностями, характерными для языков программирования.
Синтаксис bcнемного напоминает язык C.
Поскольку это утилита UNIX, то она может достаточно широко использоваться в сценариях на языке командной оболочки, в том числе и в конвейерной обработке данных.
Ниже приводится простой шаблон работы с утилитой bcв сценарии. Здесь используется прием подстановки команд.
variable=$(echo "OPTIONS; OPERATIONS" | bc)
Пример 12-32. Ежемесячные выплаты по займу
#!/bin/bash
# monthlypmt.sh: Расчет ежемесячных выплат по займу.
# Это измененный вариант пакета "mcalc" (mortgage calculator),
#+ написанного Jeff Schmidt и Mendel Cooper (ваш покорный слуга).
# http://www.ibiblio.org/pub/Linux/apps/financial/mcalc-1.6.tar.gz [15k]
echo
echo "Введите сумму займа, процентную ставку и срок займа,"
echo "для расчета суммы ежемесячных выплат."
bottom=1.0
echo
echo -n "Сумма займа (без запятых -- с точностью до доллара) "
read principal
echo -n "Процентная ставка (процент) " # Если 12%, то нужно вводить "12", а не ".12".
read interest_r
echo -n "Срок займа (месяцев) "
read term
interest_r=$(echo "scale=9; $interest_r/100.0" | bc) # Здесь "scale" -- точность вычислений.
interest_rate=$(echo "scale=9; $interest_r/12 + 1.0" | bc)
top=$(echo "scale=9; $principal*$interest_rate^$term" | bc)
echo; echo "Прошу подождать. Вычисления потребуют некоторого времени."
let "months = $term - 1"
# ====================================================================
for ((x=$months; x > 0; x--))
do
bot=$(echo "scale=9; $interest_rate^$x" | bc)
bottom=$(echo "scale=9; $bottom+$bot" | bc)
# bottom = $(($bottom + $bot"))
done
# --------------------------------------------------------------------
# Rick Boivie предложил более эффективную реализацию
#+ цикла вычислений, который дает выигрыш по времени на 2/3.
# for ((x=1; x <= $months; x++))
# do
# bottom=$(echo "scale=9; $bottom * $interest_rate + 1" | bc)
# done
# А затем нашел еще более эффективную альтернативу,
#+ которая выполняется в 20 раз быстрее !!!
# bottom=`{
# echo "scale=9; bottom=$bottom; interest_rate=$interest_rate"
# for ((x=1; x <= $months; x++))
# do
# echo 'bottom = bottom * interest_rate + 1'
# done
# echo 'bottom'
# } | bc` # Внедрить цикл 'for' в конструкцию подстановки команд.
# ====================================================================
# let "payment = $top/$bottom"
payment=$(echo "scale=2; $top/$bottom" | bc)
# Два знака после запятой, чтобы показать доллары и центы.
echo
echo "ежемесячные выплаты = \$$payment" # Вывести знак "доллара" перед числом.
echo
exit 0
# Упражнения:
# 1) Добавьте возможность ввода суммы с точностью до цента.
# 2) Добавьте возможность ввода процентной ставки как в виде процентов, так и в виде десятичного числа -- доли целого.
Читать дальше