Bash учебное пособие. Часть 4: Одинарные и двойные кавычки. Математические операции

Если кавычки ограничивают строку, то все спецсимволы внутри не будут интерпретированы:

ps ax|grep -t unix

результат будет :

grep: invalid option — t
Usage: grep [OPTION]… PATTERN [FILE]…
Try `grep —help’ for more information.

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

ps ax|grep » -t unix»
 9260 ?        S      0:00 tlsmgr -l -t unix -u
25874 pts/6    S+     0:00 grep  -t unix

Очень важно запомнить, что одинарные кавычки(‘ ‘) и двойные кавычки(» «) отличаются лишь тем, что двойные не интерпретируют символ $, то есть вы можете использовать переменные в своей строке. Двойные кавычки могут быть использованы для предотвращения разбиения строки на слова. Заключенные в кавычки слова будут восприниматься как один параметр:

VAR="A B   C         D"
echo $VAR

На выходе получим:

A B C D

То есть команда echo вывела 4 отдельных элемента. Для того, что бы наша переменная выводилась как один элемент, необходимо использовать кавычки:

VAR="A B   C         D"
echo "$VAR"

На выходе получим:

A B   C         D

Но, что же делать если вам необходимо вывести кавычки или какой-то другой спец символ? Все очень просто, можно воспользоваться экранированием. Символ экранирования — \. Предположим что нам необходимо вывести на экран — «deffered» mail in [/var/spool/deffered] «bounced» mail in [/var/spool/bounced]. Если вы сделаете вот так:

VAR="deffered" mail in /var/spool/deffered "bounced" mail in /var/spool/bounced
echo $VAR

То переменной VAR будет назначено значение deffered, а затем скрипт попытается запустить команду mail. Для того, что бы у нас вся эта строкак была одним параметром, она должна выглядеть так:

VAR="\"deffered\" mail in /var/spool/deffered \"bounced\" mail in /var/spool/bounced"
echo $VAR

и результатом будет:

«deffered» mail in /var/spool/deffered «bounced» mail in /var/spool/bounced

В таких командах как echo и sed есть несколько специальных экранированных символов:

 \n перевод строки (новая строка)
 \r перевод каретки
 \t табуляция
 \v вертикальная табуляция
 \b забой (backspace)
 \a "звонок" (сигнал)
 \0xx ASCII-символ с кодом 0xx в восьмеричном виде)

Несколько примеров с командой echo. Для того, что бы экранированные спец символы работали, вам необходимо запускать команду echo с параметром -e или вы можете использовать такую конструкцию — $’/X’, как это работает вы сейчас уведите в примере:

#!/bin/bash
#
VAR="+++ +++"
echo "\\n"
echo -e "$VAR\n$VAR"
echo
echo "\\t\\t"
echo -e "$VAR\t\t$VAR"
echo
echo "\\v\\v"
echo -e "$VAR\v\v$VAR"
echo
echo "\\n"
echo "$VAR"$'\n'"$VAR" 

Результат будет:

\n
+++ +++
+++ +++

\t\t
+++ +++         +++ +++

\v\v
+++ +++

       +++ +++

\n
+++ +++
+++ +++

Если строка сценария заканчивается символом создания конвейера |, то необходимость в применении символа \, для экранирования перевода строки, отпадает. Тем не менее, считается хорошим тоном, всегда использовать символ «\» в конце промежуточных строк многострочных команд.

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

Формат арифметического выражения выглядит так:

$((ВЫРАЖЕНИЕ)) или $[ВЫРАЖЕНИЯ]

Список операторов:

	Operator															 Meaning
VAR++ and VAR-- 										переменная пост-инкремент и пост-декремент
++VAR and --VAR 										переменная преинкремента и предекремента
- and + 												унарные минус и плюс
! and ~ 												логические и побитового отрицание
** 														возведение в степень
*, / and % 												умножение, деление, остаток
+ and - 												сложения, вычитания
<< and >> 												левый и правый побитовый сдвиг
<=, >=, < and > 										операторы сравнения
== and != 												равенство и неравенство
& 														побитовое И
^ 														побитовое исключающее ИЛИ
| 														побитовое ИЛИ
&& 														логическое И
|| 														логическое ИЛИ
expr ? expr : expr 										условная оценка
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^= and |= 			назначение
, 														разделитель между выражениями

Небольшой пример:

#!/bin/bash
#
A=5
B=4
C=1
let C++
D=$(( $A+$B ))
echo $C
echo $D

Результатом будет:

C = 2
D = 9

Часть 1: скрипт Hellow World
Часть 2: Переменные
Часть 3: Специальные параметры
Часть 4: Одинарные и двойные кавычки. Математические операции
Часть 5: Структурные конструкции и команда test
Часть 6: Структура If…then…else
Часть 7: Подмножества и части строк. Размеры

Случайные Статьи

Loading…


Количество просмотров :21775

One Comment

Оставьте коментарий