Чтение онлайн

на главную

Жанры

Командная строка Linux
Шрифт:

Начнем с простого примера. Напишем сценарий на языке bc, складывающий два числа — 2 и 2:

/* Очень простой сценарий на языке bc */

2 + 2

Первая строка сценария — это комментарий. Для оформления комментариев в языке bc используется тот же синтаксис, что и в языке программирования C. Комментарии могут размещаться в нескольких строках, начинаясь с пары символов /* и заканчиваясь парой */.

Применение bc

Сохраним сценарий, приведенный выше, в файле foo.bc, а затем выполним его,

как показано ниже:

[me@linuxbox ~]$ bc foo.bc

bc 1.06.94

Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation,

Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

4

Приглядевшись, можно обнаружить результат в самом низу, после сообщения с информацией об авторских правах. Вывод этого сообщения можно подавить параметром -q (quiet — безмолвно).

bc также можно использовать в интерактивном режиме:

[me@linuxbox ~]$ bc -q

2 + 2

4

quit

В интерактивном режиме мы просто вводим выражения и сразу же получаем результат. Команда quit завершает интерактивный сеанс.

Кроме того, существует возможность передать сценарий на стандартный ввод программы bc:

[me@linuxbox ~]$ bc < foo.bc

4

Эта возможность позволяет передавать сценарии с использованием встроенных документов, встроенных строк и конвейеров. Ниже приводится пример со встроенной строкой:

[me@linuxbox ~]$ bc <<< "2+2"

4

Пример сценария

В качестве практического примера сконструируем сценарий, вычисляющий сумму ежемесячных платежей по кредиту. Для передачи сценария программе bc в следующем примере используется встроенный документ:

#!/bin/bash

# loan-calc : сценарий вычисления суммы ежемесячных платежей по кредиту

PROGNAME=$(basename $0)

usage {

cat <<- EOF

Usage: $PROGNAME PRINCIPAL INTEREST MONTHS

Where:

PRINCIPAL is the amount of the loan.

INTEREST is the APR as a number (7% = 0.07).

MONTHS is the length of the loan's term.

EOF

}

if (($# != 3)); then

usage

exit 1

fi

principal=$1

interest=$2

months=$3

bc <<- EOF

scale = 10

i = $interest / 12

p = $principal

n = $months

a = p * ((i * ((1 + i) ^ n)) / (((1 + i) ^ n) - 1))

print a, "\n"

EOF

Запустив этот сценарий, вы получите следующие результаты:

[me@linuxbox ~]$ loan-calc 135000 0.0775 180

1270.7222490000

В этом примере вычисляется размер ежемесячных платежей по кредиту на сумму $135 000, выданному под 7,75 % годовых на 180 месяцев (15 лет). Обратите внимание на точность результата. Она определяется значением специальной переменной scale в сценарии на языке bc. Полное описание языка bc можно найти на справочной странице (man) для bc. Несмотря на то что форма записи математических выражений немного отличается от используемой в командной оболочке (bc больше напоминает язык C), значительная часть сценария

все же выглядит достаточно понятной, учитывая все, что мы узнали к настоящему моменту.

Заключительное замечание

В этой главе мы узнали множество маленьких хитростей, которые могут пригодиться в практической работе. С ростом опыта в создании сценариев умение эффективно работать со строками и числами обретает истинную ценность. Наш сценарий loan-calc показал, что даже простые сценарии могут производить некоторые действительно полезные вычисления.

Дополнительные сведения

Даже при том, что сценарий loan-calc работает, он далек от совершенства. В качестве самостоятельного упражнения попробуйте улучшить сценарий loan-calc, добавив в него следующие возможности:

• полную проверку аргументов командной строки;

• параметр командной строки, реализующий «интерактивный» режим, в котором сценарий будет запрашивать ввод суммы, процента и срока кредита;

• улучшенный формат вывода.

35. Массивы

В предыдущей главе мы научились работать в командной оболочке со строками и числами. Типы данных, которые мы рассматривали до сих пор, в компьютерных кругах известны как скалярные переменные, то есть переменные, способные хранить единственное значение.

В этой главе мы познакомимся еще с одной структурой данных, которая называется массивом, способной хранить множество значений. Массивы поддерживаются практически во всех языках программирования. Командная оболочка также поддерживает их, хотя и в несколько ограниченном виде. Но даже в этом случае они могут использоваться для решения многих задач программирования.

Что такое массивы?

Массивы — это переменные, хранящие более одного значения. Массивы организованы подобно таблице. Возьмем, к примеру, электронную таблицу. Электронная таблица действует подобно двумерному массиву. В ней есть строки и столбцы, и каждая отдельная ячейка имеет свой адрес, определяемый номером строки и номером столбца. Массив устроен аналогично. Массив состоит из ячеек, которые называют элементами, и каждый элемент содержит данные. Доступ к отдельному элементу осуществляется с использованием его адреса, который называется индексом.

Большинство языков программирования поддерживает многомерные массивы. Электронная таблица — это пример многомерного массива с двумя измерениями: ширина и высота. Многие языки поддерживают массивы с произвольным числом измерений, однако на практике чаще всего, пожалуй, используются двух- и трехмерные массивы.

Массивы в bash ограничены единственным измерением. Их можно рассматривать как электронные таблицы с единственным столбцом. Но даже с этим ограничением массивам можно найти массу применений. Впервые поддержка массивов появилась в bash версии 2. Оригинальная командная оболочка Unix sh вообще не поддерживала их.

Поделиться:
Популярные книги

Повелитель механического легиона. Том VI

Лисицин Евгений
6. Повелитель механического легиона
Фантастика:
технофэнтези
аниме
фэнтези
5.00
рейтинг книги
Повелитель механического легиона. Том VI

Ваше Сиятельство 6

Моури Эрли
6. Ваше Сиятельство
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 6

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Начальник милиции. Книга 4

Дамиров Рафаэль
4. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 4

Полководец поневоле

Распопов Дмитрий Викторович
3. Фараон
Фантастика:
попаданцы
5.00
рейтинг книги
Полководец поневоле

Я же бать, или Как найти мать

Юнина Наталья
Любовные романы:
современные любовные романы
6.44
рейтинг книги
Я же бать, или Как найти мать

Маршал Советского Союза. Трилогия

Ланцов Михаил Алексеевич
Маршал Советского Союза
Фантастика:
альтернативная история
8.37
рейтинг книги
Маршал Советского Союза. Трилогия

Боги, пиво и дурак. Том 4

Горина Юлия Николаевна
4. Боги, пиво и дурак
Фантастика:
фэнтези
героическая фантастика
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 4

Беглец

Бубела Олег Николаевич
1. Совсем не герой
Фантастика:
фэнтези
попаданцы
8.94
рейтинг книги
Беглец

Возвращение Безумного Бога 3

Тесленок Кирилл Геннадьевич
3. Возвращение Безумного Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Возвращение Безумного Бога 3

Идеальный мир для Лекаря 9

Сапфир Олег
9. Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
6.00
рейтинг книги
Идеальный мир для Лекаря 9

Темный Лекарь 7

Токсик Саша
7. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.75
рейтинг книги
Темный Лекарь 7

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Курсант: Назад в СССР 13

Дамиров Рафаэль
13. Курсант
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Курсант: Назад в СССР 13