Linux shell арифметические операции

Глава 8. Операции и смежные темы

присваивание

Инициализация переменной или изменение ее значения

Универсальный оператор присваивания, пригоден как для сравнения целых чисел, так и для сравнения строк.

Пусть вас не смущает, что оператор присваивания ( «=» ), по своему внешнему виду, совпадает с оператором сравнения (=).

арифметические операторы

возведение в степень

модуль (деление по модулю), возвращает остаток от деления

Этот оператор может применяться в алгоритмах генерации псевдослучайных чисел в заданном диапазоне (см. Пример 9-23 и Пример 9-25), для форматирования вывода на экран (см. Пример 25-10 и Пример A-7), и даже для генерации простых чисел (см. Пример A-18). На удивление часто операцию деления по модулю можно встретить в различных численных алгоритмах.

Пример 8-1. Наибольший общий делитель

«плюс-равно» (увеличивает значение переменной на заданное число)

let «var += 5» значение переменной var будет увеличено на 5.

«минус-равно» (уменьшение значения переменной на заданное число)

«умножить-равно» (умножить значение переменной на заданное число, результат записать в переменную)

let «var *= 4» значение переменной var будет увеличено в 4 раза.

«слэш-равно» (уменьшение значения переменной в заданное число раз)

«процент-равно» (найти остаток от деления значения переменной на заданное число, результат записать в переменную)

Арифметические операторы очень часто используются совместно с командами expr и let.

Пример 8-2. Арифметические операции

Целые числа в Bash фактически являются знаковыми длинными целыми (32-бит), с диапазоном изменений от -2147483648 до 2147483647. Если в результате какой либо операции эти пределы будут превышены, то результат получится ошибочным.

Bash ничего не знает о существовании чисел с плавающей запятой. Такие числа, из-за наличия символа десятичной точки, он воспринимает как строки.

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

битовые операции. Битовые операции очень редко используются в сценариях командного интерпретатора. Их главное назначение, на мой взгляд, установка и проверка некоторых значений, читаемых из портов ввода-вывода и сокетов. «Битовые операции» гораздо более уместны в компилирующих языках программирования, таких как C и C++.

битовые операции

сдвигает на 1 бит влево (умножение на 2)

let «var var сдвигается влево на 2 бита (умножается на 4)

сдвиг вправо на 1 бит (деление на 2)

«сдвиг-вправо-равно» (имеет смысл обратный )

Источник

Основы BASH. Часть 2

Основы BASH. Часть 2.
Извиняюсь за такую большую задержку между статьями, но сессия дает о себе знать в самый неподходящий момент 🙂
Всем спасибо за замечания, критику и дополнения, которые были озвучены в комментариях к прошлой статье.
Эта часть, как и обещал, будет посвящена циклам, математическим операциям и использованию внешних команд.
Начнем.

Циклы. Цикл for-in.

#!/bin/bash
for i in 0 1 2 3 4 #переменной $i будем поочередно присваивать значения от 0 до 4 включительно
do
echo «Console number is $i» >> /dev/pts/$i #Пишем в файл /dev/pts/$i(файл виртуального терминала) строку «Console number is $i»
done #цикл окончен
exit 0

После выполнения примера в первых 5 виртуальных консолях(терминалах) появится строка с её номером. В переменную $i поочередно подставляются значения из списка и в цикле идет работа со значением этой переменной

Циклы. Цикл while.

#!/bin/bash
again=yes #присваиваем значение «yes» переменной again
while [ «$again» = «yes» ] #Будем выполнять цикл, пока $again будет равно «yes»
do
echo «Please enter a name:»
read name
echo «The name you entered is $name»

echo «Do you wish to continue?»
read again
done
echo «Bye-Bye»

$ ./bash2_primer1.sh
Please enter a name:
ite
The name you entered is ite
Do you wish to continue?
yes
Please enter a name:
mihail
The name you entered is mihail
Do you wish to continue?
no
Bye-Bye

Как видим цикл выполняется до тех пор, пока мы не введем что-то отличное от «yes». Между do и done можно описывать любые структуры, операторы и т.п., все они будут выполнятся в цикле.Но следует быть осторожным с этим циклом, если вы запустите на выполнение в нём какую-либо команду, без изменения переменной выражения, вы можете попасть в бесконечный цикл.
Теперь об условии истинности. После while, как и в условном операторе if-then-else можно вставлять любое выражение или команду, которая возвращает код возврата, и цикл будет исполнятся до тех пор, пока код возврата = 0! Оператор «[» аналог команды test, которая проверяет истинность условия, которое ей передали.

Рассмотрим еще один пример, я взял его из книги Advanced Bash Scripting. Уж очень он мне понравился :), но я его немного упростил. В этом примере мы познакомимся с еще одним типом циклов UNTIL-DO. Эта практически полный аналог цикла WHILE-DO, только выполняется пока какое-то выражение ложно.
Вот пример:

#!/bin/bash
echo «Введите числитель: »
read dividend
echo «Введите знаменатель: »
read divisor

dnd=$dividend #мы будем изменять переменные dividend и divisor,
#сохраним их знания в других переменных, т.к. они нам
#понадобятся
dvs=$divisor
remainder=1

until [ «$remainder» -eq 0 ]
do
let «remainder = dividend % divisor»
dividend=$divisor
divisor=$remainder
done

echo «НОД чисел $dnd и $dvs = $dividend»

$ ./bash2_primer3.sh
Введите числитель:
100
Введите знаменатель:
90
НОД чисел 100 и 90 = 10

Математические операции

#!/bin/bash
echo «Введите a: »
read a
echo «Введите b: »
read b

let «c = a + b» #сложение
echo «a+b= $c»
let «c = a / b» #деление
echo «a/b= $c»
let «c

$ ./bash2_primer2.sh
Введите a:
123
Введите b:
12
a+b= 135
a/b= 10
c после сдвига на 2 разряда: 40
123 / 12. остаток: 3

Работа с внешними программами при написании shell-скриптов

Перенаправление потоков.

В bash(как и многих других оболочках) есть встроенные файловые дескрипторы: 0 (stdin), 1 (stdout), 2 (stderr).
stdout — Стандартный вывод. Сюда попадает все что выводят программы
stdin — Стандартный ввод. Это все что набирает юзер в консоли
stderr — Стандартный вывод ошибок.
Для операций с этими дескрипторами, существуют специальные символы: > (перенаправление вывода), /dev/null

символ «&» означает указатель на дескриптор 1(stdout)
(Поумолчанию stderr пишет на ту консоль, в котрой работает пользователь(вренее пишет на дисплей)).

2.Конвееры.

ls -la | grep «hash» |sort > sortilg_list

вывод команды ls -la передается команде grep, которая отбирает все строки, в которых встретится слово hash, и передает команде сортировке sort, которая пишет результат в файл sorting_list. Все довольно понятно и просто.

Чаще всего скрипты на Bash используются в качестве автоматизации каких-то рутинных операций в консоли, отсюда иногда возникает необходимость в обработке stdout одной команды и передача на stdin другой команде, при этом результат выполнения одной команды должен быть неким образом обработан. В этом разделе я постораюсь объяснить основные принципы работы с внешними командами внутри скрипта. Думаю что примеров я привел достаточно и можно теперь писать только основные моменты.

1. Передача вывода в переменную.

a = `echo «qwerty»`
echo $a

Результат работы: qwerty

LIST=`find /svn/ -type d 2>/dev/null| awk ‘ ‘| sort|uniq | tr ‘\n’ ‘ ‘`
for ONE_OF_LIST in $LIST
do
svnadmin hotcopy /svn/$ONE_OF_LIST /svn/temp4backup/$ONE_OF_LIST
done

Здесь мы используем цикл for-do-done для архивирование всех директорий в папке /svn/ с помощью команды svnadmin hotcopy(что в нашем случае не имеет никого значения, просто как пример). Наибольшй интерес вызывает строка: LIST=`find /svn/ -type d 2>/dev/null| awk ‘ ‘| sort|uniq | tr ‘\n’ ‘ ‘` В ней переменной LIST присваивается выполнение команды find, обработанной командами awk, sort, uniq,tr(все эти команды мы рассматривать не будем, ибо это отдельная статья). В переменной LIST будут имена всех каталогов в папке /svn/ пгомещенных в одну строку(для того чтобы её стравить циклу.

Как видно, все не сложно, достаточно понять принцип и написать пару своих скриптов. В заключении статьи хочу пожелать удачи в изучении BASH и Linux в целом. Критика, как водится приветствуется. Следующая статья возможно будет посвещена использованию таких программ как sed, awk.

Источник

Shell основные операторы

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

  • Арифметические операторы
  • Операторы отношения
  • Логические операторы
  • Строковые операторы
  • Файл Test Операторы

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

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

Например, чтобы сложить два числа (обратите внимание на использование `анти-кавычки вместо одинарные кавычки ‘):

Выполните сценарий, вывод выглядит следующим образом:

Две вещи, чтобы отметить:

  • Между выражения и операторы должны иметь место, например, 2 + 2 не так, вы должны написать 2 + 2, что мы знакомы с большинством языков программирования не совпадают.
  • Полное выражение будет « содержится, обратите внимание, что этот символ обычно не используется в одинарные кавычки, под клавишей Esc.

Арифметические операторы

В следующей таблице перечислены общие арифметические операторы, предполагая 10 переменной, переменная Ь 20:

операторы объяснение примеров
+ прибавление `Expr $ а + $ b` результат 30.
вычитание `Expr $ а — $ b` результат -10.
* умножение `Expr $ A \ * Результаты $ b` за 200.
/ разделение `Expr $ б / $ результат A` 2.
% остаток `Expr $ Ь% результата $ A` 0.
= присваивание а = $ Ь переменной Ь будет присвоить значение а.
== Ровный. Используется для сравнения двух чисел, то же возвращение истинного. [$ A == $ B] возвращает ложь.
! = Не равно. Используется для сравнения двух чисел не одни и те же возвращает истину. [$ A! = $ B] возвращает истину.

Примечание: Условное выражение должно быть заключено в квадратные скобки, и пробел, например:[$ а == $ Ь] неправильно и должно быть записано в виде[$ а == $ b].

примеров

Арифметические операторы примеры являются следующие:

Выполните сценарий, вывод выглядит следующим образом:

  • Умножение знак (*) должны быть добавлены перед обратной косой черты (\) для достижения умножения;
  • если . то . фи условно отчетность, последующая деятельность будет покрыта.
  • В оболочке MAC синтаксиса выраж: $ ((выражение)), где выражение «*» нужно бежать символ «\» .

Операторы отношения

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

В следующей таблице перечислены наиболее часто используемые операторы сравнения, предполагая 10 переменной, переменная Ь 20:

операторы объяснение примеров
-eq Детектирование ли два числа равны, равные возвращает TRUE. [$ A $ -eq Ь] возвращает ложь.
-ne Детектирование ли два числа равны, не равно возвращает истину. [$ A $ -ne Ь] возвращает истину.
-gt Левые больше числа обнаруженных справа, и если да, то он возвращает истину. [$ A $ -gt Ь] возвращает ложь.
-lt Обнаружение число меньше, чем справа налево, и если да, то он возвращает истину. [$ A $ -lt Ь] возвращает истину.
-ge Детектирование ли число равно справа от левой стороны большой, и если да, то он возвращает истину. [$ A $ -ge Ь] возвращает ложь.
-le Является ли число обнаружения меньше или равна справа налево, если он есть, он возвращает истину. [$ A $ -le Ь] возвращает истину.

примеров

Реляционные операторы примеры являются следующие:

Выполните сценарий, вывод выглядит следующим образом:

Логические операторы

В следующей таблице перечислены наиболее часто используемые логические операторы, предполагая 10 переменной, переменная Ь 20:

операторы объяснение примеров
! Нефункционирующем, выражение истинно возвращает ложь, в противном случае она возвращает истину. [! Ложь] возвращает истину.
Операция ИЛИ, есть истинное выражение возвращает истину. [$ A -lt 20 -o $ B -gt 100] возвращает истину.
-a И операции, два выражения верны, прежде чем вернуться верно. [$ A -lt 20 -a $ B -gt 100] возвращает ложь.

примеров

Логические операторы примеры являются следующие:

Выполните сценарий, вывод выглядит следующим образом:

Логические операторы

Ниже приведено описание логического оператора Shell, предполагая 10 переменной, переменная Ь 20:

операторы объяснение примеров
&& Логическое И [[$ A -lt 100 && $ B -gt 100]] возвращает ложь
|| Логическое ИЛИ [[$ A -lt 100 || $ B -gt 100]] Возвращает значение True

примеров

Примеры логических операторов заключаются в следующем:

Выполните сценарий, вывод выглядит следующим образом:

Строковые операторы

В следующей таблице перечислены часто используемые строковые операторы, взятые в качестве переменной «ABC», переменная Ь «EFG»:

операторы объяснение примеров
= Обнаружение две строки равны, равные возвращает TRUE. [$ A = $ Ь] возвращает ложь.
! = Детектирование ли две строки равны, не равны возвращает истину. [$ A! = $ B] возвращает истину.
-z Детектирование ли длина строки равна 0 для 0 возвращает истину. [-z $ A] возвращает ложь.
-n Детектирование ли длина строки равна 0, отлична от нуля возврата верно. [-n $ A] возвращает истину.
ул Определение, является ли строка пустой, не пустой возвращает истину. [$ A] возвращает истину.

примеров

Строка Операторы примеры заключаются в следующем:

Выполните сценарий, вывод выглядит следующим образом:

Файл Test Операторы

Тестовый файл оператор используется для обнаружения различных атрибутов файлов Unix.

Атрибут описано обнаружение следующим образом:

операторы объяснение примеров
-b файл Обнаружение ли файл является файлом блочного устройства, и если да, то он возвращает истину. [-b $ File] возвращает ложь.
-c файл Обнаружение ли файл является файлом символьного устройства, и если да, то он возвращает истину. [-c $ File] возвращает ложь.
-d файл Обнаружение ли файл является каталогом, и если да, то он возвращает истину. [-d $ File] возвращает ложь.
-f файл Определение является ли файл обычным файлом (ни один каталог или файл устройства), и если да, то он возвращает истину. [-f $ File] возвращает истину.
-g файл Обнаружение ли файл имеет бит SGID, и если да, то он возвращает истину. [-g $ File] возвращает ложь.
-k файл Детектирование имеет ли файл липкий бит (Липкий бит), и если да, то он возвращает истину. [-k $ File] возвращает ложь.
-p файл Обнаружение ли файл является именованным каналом, и если да, то он возвращает истину. [-p $ File] возвращает ложь.
-u файл Обнаружение ли файл имеет бит SUID, и если да, то он возвращает истину. [-u $ File] возвращает ложь.
-r файл Он определяет, является ли файл для чтения, и если да, то возвращает истину. [-r $ File] возвращает истину.
-w файл Обнаружение ли файл может быть записан, и если да, то он возвращает истину. [-w $ File] возвращает истину.
-x файл Определение того, является ли исполняемый файл, и если да, то он возвращает истину. [-x $ File] возвращает истину.
-s файл Детектирование пуст ли файл (размер файла больше, чем 0), не пусто возвращает истину. [-s $ File] возвращает истину.
-e файл Обнаружить файл (включая каталог) существует, и если да, то он возвращает истину. [-e $ File] возвращает истину.

примеров

Выполните сценарий, вывод выглядит следующим образом:

Источник

Читайте также:  Настройки windows для аист
Оцените статью