Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Логика

Как мы обнаружили в главе 27, (()) Составная команда поддерживает множество операторов сравнения. Есть еще несколько, которые можно использовать для оценки логики. Вот полный список:


Таблица 34-6: Операторы сравнения


Описание оператора

Описание оператора

<= Меньше или равно


изображение

> = Больше или равно


изображение

<Менее чем


изображение

> Больше чем


изображение


изображение

== равно


изображение

!= Не равно


изображение

&& Логическое И


изображение

|| Логическое ИЛИ


изображение

выражение1?выражение2:выражение3 Оператор сравнения (тернарный). Если выражение выражение1

оценивается как ненулевое (арифметическое истина), тогда выражение2иначе выражение3.


изображение


При использовании для логических операций выражения подчиняются правилам арифметической логики; то есть выражения, которые оцениваются как ноль, считаются ложными, в то время как ненулевые выражения считаются истинными. В (()) Составная команда отображает результаты в обычные коды выхода оболочки:



[я @ linuxbox ~] $ если ((1)); затем эхо "истина"; иначе echo "ложь"; фи

правда

[я @ linuxbox ~] $ если ((0)); затем эхо "истина"; иначе echo "ложь"; фи

ложный

[я @ linuxbox ~] $ если ((1)); затем эхо "истина"; иначе echo "ложь"; фи

правда

[я @ linuxbox ~] $ если ((0)); затем эхо "истина"; иначе echo "ложь"; фи

ложный


Самым странным из логических операторов является троичный оператор. Этот оператор (который смоделирован по образцу оператора языка программирования C) выполняет автономную логическую проверку. Его можно использовать как своего рода оператор if / then / else. Он работает с тремя арифметическими выражениями (строки не работают), и если первое выражение истинно (или ненулевое), выполняется второе выражение. В противном случае выполняется третье выражение. Мы можем попробовать это в командной строке:



[я @ linuxbox ~] $ а = 0 [я @ linuxbox ~] $ ((a <1? ++ a: - a)) [я @ linuxbox ~] $ эхо $ а

1

[я @ linuxbox ~] $ ((a <1? ++ a: - a))

[я @ linuxbox ~] $ эхо $ а

0

[я @ linuxbox ~] $ а = 0 [я @ linuxbox ~] $ ((a <1? ++ a: - a)) [я @ linuxbox ~] $ эхо $ а

1

[я @ linuxbox ~] $ ((a <1? ++ a: - a))

[я @ linuxbox ~] $ эхо $ а

0


Здесь мы видим тернарный оператор в действии. В этом примере реализован переключатель. Каждый раз при выполнении оператора значение переменной a переключается с нуля на единицу или наоборот.

Обратите внимание, что выполнение присваивания в выражениях непросто.


При попытке колотить объявит об ошибке:


[я @ linuxbox ~] $ а = 0

[я @ linuxbox ~] $ ((a <1? a + = 1: a- = 1))

bash: ((: a <1? a + = 1: a- = 1: попытка присвоения непеременной (токен ошибки "- = 1")

[я @ linuxbox ~] $ а = 0

[я @ linuxbox ~] $ ((a <1? a + = 1: a- = 1))

bash: ((: a <1? a + = 1: a- = 1: попытка присвоения непеременной (токен ошибки "- = 1")


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



[я @ linuxbox ~] $ ((a <1? (a + = 1) :( a- = 1)))

[я @ linuxbox ~] $ ((a <1? (a + = 1) :( a- = 1)))


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



#! / Bin / Баш

# arith-loop: скрипт для демонстрации арифметических операторов finished = 0

а = 0

printf "а \ та ** 2 \ та ** 3 \ n" printf "= \ t ==== \ t ==== \ n"


до ((закончено)); сделать b = $ ((a ** 2))

с = $ ((а ** 3))

printf "% d \ t% d \ t% d \ n" $ a $ b $ c ((a <10? ++ a: (finished = 1)))

сделанный

#! / Bin / Баш

# arith-loop: скрипт для демонстрации арифметических операторов finished = 0

а = 0

printf "а \ та ** 2 \ та ** 3 \ n" printf "= \ t ==== \ t ==== \ n"


до ((закончено)); сделать b = $ ((a ** 2))

с = $ ((а ** 3))

printf "% d \ t% d \ t% d \ n" $ a $ b $ c ((a <10? ++ a: (finished = 1)))

сделанный


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

а. В конце цикла оценивается значение переменной счетчика. Если оно меньше 10 (максимальное количество итераций), оно увеличивается на единицу, в противном случае переменной Finish присваивается значение единицы, что делает завершение арифметически истинным, тем самым завершая цикл. Запуск скрипта дает такой результат:


[я @ linuxbox ~] $ арифметика

[я @ linuxbox ~] $ арифметика


a

= 0

1

2

3

4

5

6

7

8

9

10

a

= 0

1

2

3

4

5

6

7

8

9

10


изображение

а ** 2 а ** 3

==== ====

а ** 2 а ** 3

==== ====

0

1

4

9

16

25

36

49

64

81

100

0

1

4

9

16

25

36

49

64

81

100

0

1

8

27

64

125

216

343

512

729

1000

0

1

8

27

64

125

216

343

512

729

1000

Лучшие облачные вычисления для ОС в OnWorks: