Вход/Регистрация
Командная строка Linux
вернуться

Шоттс Уильям

Шрифт:

real 0m0.060s

user 0m0.056s

sys 0m0.008s

Первоначальной версии потребовалось 3,618 секунды, чтобы просканировать текстовый файл, тогда как новой версии, использующей механизм подстановки параметров, понадобилось всего 0,06 секунды — весьма существенное улучшение.

Вычисление и подстановка арифметических выражений

В главе 7 мы видели, как работает механизм подстановки результатов арифметических выражений. Он используется для выполнения разных арифметических операций с целыми числами. Ниже приводится его базовый синтаксис

$((выражение))

где выражение — это любое допустимое арифметическое выражение.

Он тесно связан с составной командой , использовавшейся в главе 27 для вычисления арифметических выражений (оценки истинности).

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

Основание системы счисления

В главе 9 мы познакомились с восьмеричными (в системе счисления с основанием 8) и шестнадцатеричными (в системе счисления с основанием 16) числами. В арифметических выражениях командная оболочка позволяет использовать целочисленные константы в системах счисления с любым основанием. В табл. 34.1 показаны формы записи чисел с указанием основания системы счисления.

Таблица 34.1. Определение основания системы счисления

Форма записи

Описание

Число

По умолчанию числа без упоминания системы счисления интер­претируются как десятичные числа (в системе счисления с основанием 10)

0число

В арифметических выражениях числа, начинающиеся с нуля, интерпретируются как восьмеричные (в системе счисления с основанием 8)

0xчисло

Форма записи шестнадцатеричных чисел

основание#число

Число в системе счисления с указанным основанием

Несколько примеров:

[me@linuxbox ~]$ echo $((0xff))

255

[me@linuxbox ~]$ echo $((2#11111111))

255

В этих примерах выводится значение шестнадцатеричного числа ff (наибольшее двухзначное число) и наибольшее восьмизначное двоичное число (в системе счисления с основанием 2).

Унарные операторы

Оболочка поддерживает два унарных оператора, + и -, используемых для обозначения положительных и отрицательных чисел соответственно.

Простая арифметика

В табл. 34.2 перечислены обычные арифметические операторы.

Таблица 34.2. Арифметические операторы

Оператор

Описание

+

Сложение

–

Вычитание

*

Умножение

/

Целочисленное деление

**

Степень числа

%

Деление по модулю (остаток от целочисленного деления)

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

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

[me@linuxbox ~]$ echo $(( 5 / 2 ))

2

Это обстоятельство увеличивает важность операции определения остатка от деления:

[me@linuxbox ~]$ echo $(( 5 % 2 ))

1

Используя операторы деления и деления по модулю, можно определить, что деление 5 на 2 дает в результате 2 с остатком 1.

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

#!/bin/bash

# modulo : демонстрация оператора деления по модулю

for ((i = 0; i <= 20; i = i + 1)); do

remainder=$((i % 5))

if (( remainder == 0 )); then

printf "<%d> " $i

else

printf "%d " $i

fi

done

printf "\n"

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

[me@linuxbox ~]$ modulo

<0> 1 2 3 4 <5> 6 7 8 9 <10> 11 12 13 14 <15> 16 17 18 19 <20>

Присваивание

Хотя на данном этапе это не очевидно, тем не менее арифметические выражения могут выполнять операцию присваивания. Мы уже выполняли присваивание много раз, хотя и в других контекстах. Каждый раз, передавая переменной число, мы выполняем присваивание. То же самое можно делать в арифметических выражениях:

[me@linuxbox ~]$ foo=

[me@linuxbox ~]$ echo $foo

[me@linuxbox ~]$ if (( foo = 5 ));then echo "It is true."; fi

  • Читать дальше
  • 1
  • ...
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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