Kniga-Online.club
» » » » Командная строка Linux - Шоттс Уильям

Командная строка Linux - Шоттс Уильям

Читать бесплатно Командная строка Linux - Шоттс Уильям. Жанр: Интернет год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

[[email protected] ~]$ 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

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

[[email protected] ~]$ 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 вообще не поддерживала их.

Создание массива

Переменным-массивам можно давать такие же имена, что и другим переменным bash, и они точно так же создаются автоматически при первом обращении к ним. Например:

[[email protected] ~]$ a[1]=foo

[[email protected] ~]$ echo ${a[1]}

foo

Это пример присваивания значения элементу массива и обращения к нему. Первая команда присваивает значение foo элементу массива a с индексом 1. Вторая команда выводит значение, хранящееся в элементе с индексом 1. Использование фигурных скобок во второй команде является обязательным условием, иначе команд­ная оболочка будет пытаться выполнить подстановку пути, опираясь на имя элемента массива.

Массив можно также создать командой declare:

[[email protected] ~]$ declare -a a

Параметр -a в этом примере требует от declare создать массив (array) с именем a.

Присваивание значений массиву

Значения элементам массивов можно присваивать одним из двух способов. Присваивание одиночных значений осуществляется с использованием следующего синтаксиса:

имя[индекс]=значение

где имя — это имя массива, индекс — целое число (или арифметическое выражение) больше или равное 0. Обратите внимание, что первый элемент массива имеет индекс 0, а не 1. значение — строка или целое число, присваиваемое элементу массива.

Присвоить сразу множество значений можно с использованием следующего синтаксиса:

имя=(значение1значение2 ...)

где имя — это имя массива, а значение1 значение1 ... — значения, присваиваемые последовательным элементам массива, начиная с элемента с индексом 0. Например, если понадобится присвоить элементам массива days сокращенные названия дней недели, это можно сделать так:

[[email protected] ~]$ days=(Sun Mon Tue Wed Thu Fri Sat)

Можно присваивать значения конкретным элементам, указывая индекс для каждого значения:

[[email protected] ~]$ days=([0]=Sun [1]=Mon [2]=Tue [3]=Wed [4]=Thu [5]=Fri [6]=Sat)

Доступ к элементам массива

Итак, где могут пригодиться массивы? Так же как многие задачи управления данными могут решаться с применением программ электронных таблиц, массивы могут применяться для решения множества задач программирования.

Рассмотрим простой пример сбора и представления данных. Напишем сценарий, проверяющий время последнего изменения файлов в указанном каталоге. На основе полученных данных сценарий будет выводить таблицу, показывающую, сколько файлов было изменено в каждый час суток. Такой сценарий можно использовать, например, для выяснения периодов наибольшей активности системы. Сценарий с названием hours производит следующий результат:

[[email protected] ~]$ hours .

Hour    Files    Hour    Files

----    -----    ----    -----

00      0        12      11

01      1        13      7

02      0        14      1

03      0        15      7

04      1        16      6

05      1        17      5

06      6        18      4

07      3        19      4

08      1        20      1

09      14       21      0

Перейти на страницу:

Шоттс Уильям читать все книги автора по порядку

Шоттс Уильям - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


Командная строка Linux отзывы

Отзывы читателей о книге Командная строка Linux, автор: Шоттс Уильям. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

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

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*