Главная страница

Семинар кодирование информации общие сведения


Скачать 63.47 Kb.
НазваниеСеминар кодирование информации общие сведения
Дата06.11.2019
Размер63.47 Kb.
Формат файлаdocx
Имя файлаSeminary_3_4_2019 (1).docx
ТипСеминар
#93844
страница6 из 6
1   2   3   4   5   6

Правила применения кавычек в Shell


В языке Shell кавычки оказывают существенно влияние на процесс интерпретации командных строк.
      1. Одинарные ' ' и двойные " " кавычки


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

Если переменная заключена в двойные кавычки, то все символы за исключением $, \ и ` будут восприниматься буквально, а указанные символы сохраняют свое специальное значение.

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

Так результатом выполнения команд

$ echo 'per: ${maxi}'

$ echo "per: ${maxi}"

будет

per: ${maxi}

и

per: 10

      1. Обратные кавычки ` `


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

Например, команда

$ echo `date`

позволит вывести на экран дату в формате представления команды date

пятница, 13 октября 2017 г. 02:00:12 (MSK)

Результат выполнения команды может быть присвоен переменной

$ Todaydate=`date`

$ echo $Todaydate

пятница, 13 октября 2017 г. 02:00:12 (MSK)

Допускается комбинация кавычек в рамках одной команды:

$ echo " Today is `date`."

Today is пятница, 13 октября 2017 г. 02:00:12 (MSK).

        1. Команда echo


Предназначена для вывода в поток стандартного вывода (stdout) выражение или содержимое переменной. Функция имеет формат:

$ echo [<опции>] <текст>

Так, вызов команды

$ echo HELLO

приведет к выводу на экран слова HELLO\n (по умолчанию команда добавляет в конец выведенного выражения символ перевода строки \n, для отключения данной опции, необходимо запустить команду с ключом -n).

Вызванная без опций команда echo не интерпретирует ESCAPE-последовательности (например, \n или \t). Для включения режима распознавания ESCAPE-последовательностей используется ключ –e. Например, вызов команды

$ echo ’’H\tE\tL\tL\tO’’

будет строка

HtEtLtLtO

в то время как вызов той же команды с опцией –e даст следующий результат

$ echo -e ’’H\tE\tL\tL\tO’’

H E L L O

        1. Команда test


Test – встроенная команда интерпретатора bash, реализующая проверку файлов (унарное тестирование), а также сравнение файлов, текстовых строк и целых чисел. В результате работы команда test устанавливает код завершения равным 0 (TRUE - истина) или 1 (FALSE - ложь) в зависимости от результата проверки. В случае завершения работы с ошибкой, команда test возвращает значение, равное 1.

Команда преимущественно test используется в управляющих конструкциях if, while и until для проверки условия.

Команда test может быть записана в одном из двух следующих эквивалентных вариантах:

test проверяемое выражение

[ проверяемое выражение ]

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

Проверяемое выражение может иметь один из следующих форматов:

-ключ строка/файл

строка1/файл1 -ключ строка2/файл2

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

Таблица 1.10

Ключи команды test

Выражение

Команда test возвращает 0 (TRUE), если …

Ключи для проверки файлов

-e file

file существует (вне зависимости от его типа)

-f file

проверяемый file существует и являтся обычным (не каталог и не файл устройства)

-s file

file существует и имеет ненулевой размер

-d file

проверяемый file существует и является директорией (каталог)

-b file

проверяемый file существует и является специальным блочным устройством (CD-ROM, floppy и пр.)

-c file

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

-p file

проверяемый file существует и является именованым каналом

-h file

-L file

проверяемый file существует и является символьной ссылкой

-S file

проверяемый file существует и является сокетом

-t file

проверяемый file связан с терминальным устройством (является стадартным устройством ввода (stdin, 0) или вывода (stdout, 1))

-r file

проверяемый file существует и доступен для чтения пользователю, запустившему сценарий

-w file

проверяемый file существует и доступен для записи пользователю, запустившему сценарий

-x file

проверяемый file существует и доступен для выполнения пользователю, запустившему сценарий

-O file

запускающий сценарий является владельцем file

-G file

запускающий сценарий и проверяемый file принадлежат одной группе

-N file

с момента последнего чтения file был изменен

file1 -nt file2

file1 былизменен ранее, чем file2

file1 -ot file2

file1 был изменен позже, чем file2

file1 -et file2

file1 является жесткой ссылкой на file2

Ключи для проверки и сравнения строк

-z string

string имеет длину, равную нулю

-n string

string имеет длину, отличную от нуля

string1 = string2

string1 == string2

string1 и string2 лексикографически равны

string1 != string2

string1 и string2 лексикографически не равны

string1 < string2

string1 лексикографически меньше string2 (то есть string1 и string2 отсортированы в порядке лексикографического возрастания)

string1 > string2

string1 лексикографически больше string2 (то есть string1 и string2 отсортированы в порядке лексикографического убывания)

Ключи для сравнения целых чисел

n1 –eq n2

числа n1 и n2 алгебраически эквивалентны

n1 –ne n2

числа n1 и n2 алгебраически не эквивалентны

n1 –gt n2

число n1 алгебраически больше, чем число n2

n1 –ge n2

число n1 алгебраически больше или эквивалентно числу n2

n1 –lt n2

число n1 алгебраически меньше, чем число n2

n1 –le n2

число n1 алгебраически меньше или эквивалентно числу n2

Результат проверки команды test может быть инвертирован при помощи использования символа ! , который изменяет результат тестирования: в случае успешной проверки код возврата будет равен 1 (FALSE – ложь).

Команда тестирования, представленная [ ] , имеет расширенный вариант:

[[ ]]

Внутри [[ ]] разрешено использование операторов && (логическое И), || (логическое ИЛИ), которые недопустимы в [ ].

Выражения в команде test могут комбинироваться с помощью следующих операций:

-а – логическое И;

-о – логическое ИЛИ.

Ниже приведены некоторые примеры использования команды test.

$ [ -s file.txt ]

проверка, что file.txt не пустой;

$ [ str1 = str2 ]

проверка, что строки str1 и str2 совпадают;

$ [ x –le y ]

проверка, что x меньше или равно y.



        1. Условный оператор if


Оператор if позволяет организовать проверку условий, основанную на проверке значений 0 (истина) и 1 (ложь). В общем случае оператор if имеет структуру:

if условие

then список

[ elif условие

then список ]

[ else список ]

fi

Конструкции, указанные в [ ] не являются обязательными, а выделенные полужирным курсивом элементы являются служебным словам конструкции. Результат проверки, равный 0, воспринимается как истина, а равный 1 – как ложь.

Часть elif используется для проверки более, чем двух условий.

Если выполнено условие, то выполняется список.

Ниже приведен пример, демонстрирующий работу условного оператора if.

if [ $a –gt $b ]

then echo “a>b”

else echo “a

fi

Здесь a и b – некоторые целые числа. Если a больше b, то на экран выводится запись a>b, в противном случае: a.
      1. Коды завершения


Каждая выполняемая в shell команда после выполнения возвращает так называемый код завершения. Для просмотра кода завершения последней выполненной команды достаточно вызвать команду:

$ echo $?

Общими системными командами используется два кода завершения:

0 – успешное завершение команды, ошибок нет;

1 – неудачное завершение команды, имеются ошибки.

Язык позволяет реализовать пользовательский код завершения shell-сценария (например, с использованием команды exit). Он может быть использован другим shell-сценарием или функцией языка shell. Завершение сценария с генерацией кода считается хорошим тоном в программировании.

        1. Команда exit


Для завершения текущего процесса в shell имеется команда exit. Команда имеет следующий формат:

exit<число>

Если вывести команду без параметра, shell отобразит значение последней команды. Принято считать, что значение exit = 0 – успешное завершение (ошибок нет); exit = 1 – неудачное завершение (имеется ошибка).

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

$ exit 2

Параметр команды exit может принимать значение от 0 до 255.
      1. Перенаправление потоков ввода-вывода


Многие команды OС Linux используют стандартные информационные потоки для ввода данных, вывода результатов и протокола диагностики. Эти стандартные потоки обозначают дискрипторы 0 (stdin), 1 (stdout) и 2 (stderr). По умолчанию они связаны с управляющим терминалом, откуда вызвана команда. Так, стандартный входной поток stdin по умолчанию связан с клавиатурой, выходной поток stdout и поток сообщений об ошибках srderr с экраном компьютера. Командный процессор позволяет перенаправить стандартные потоки команд в файлы и программные каналы. Для этого в командной строке предусмотрено использование следующей символики перенаправления стандартных потоков:

< file – переключение стандартного ввода на ввод из файла

> file – переключение стандартного вывода на вывод в файл

2> file – переключение протокола стандартной диагностики в файл

>> file – добавление стандартного вывода в конец файла

2>> file – добавление протокола стандартной диагностики в конец файла

<< word – ограничение стандартного ввода заданным словом

Перечисленные операторы переключения стандартных потоков допустимо применять как по отдельности, так и комбинировать их в командной строке (один на ввод и один на вывод).

Например:

$ cat > file.txt << end

  • Aaa

  • bbb

  • end = завершение ввода (аналогично Ctrl+d)

Содержимое файла file.txt можно проверить командой

$ cat file.txt

Его содержимое будет следующим:

Aaa

bbb

Такой же результат даст команда

$ cat << end > file.txt

Следующая команда добавит в конец файла текущую дату:

$ date >> file.txt

file.txt:

Aaa

bbb

Fri Sep 25 12:00:00 GMT+3 2015

        1. Команда expr


Команда expr применяется в основном для вычисления выражений, но может быть применена и для обработки строк. Результат работы команды выводится на стандартный вывод stdout. Операнды выражения должны быть разделены пробелами, а метасимволы должны быть экранированы.

Команда имеет следующую структуру

expr<вычисляемое выражение>

В таблице 1.11 приведено описание операторов, используемых в команде expr(некоторые операторы экранированы).
Таблица 1.11

Операции команды expr

Оператор

Описание

<выр1> \| <выр2>

Если <выр1> не пустое и не нулевое, то возвращает его, иначе возвращает <выр2>

<выр1> \& <выр2>

Если оба выражение непустые и ненулевые, то возвращает <выр1>, иначе возвращает 0

<выр1> = <выр2>

<выр1> \> <выр2>

<выр1> \>= <выр2>

<выр1> \< <выр2>

<выр1> \<= <выр2>

<выр1> != <выр2>

Возвращает результат целочисленного сравнения если оба выражения – целые; иначе возвращает результат лексического сравнения

<выр1> + <выр2>

<выр1> - <выр2>

Сложение и вычитание целочисленных аргументов

<выр1> \* <выр2>

<выр1> / <выр2>

<выр1> % <выр2>

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

<выр1> : <рег>

Оператор сопоставления сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Обычно оператор сравнения возвращает число символов, удовлетворяющих образцу (0 при неудачном сравнении). Символы \( и \) могут применяться для выделения части первого аргумента


Ниже приведены некоторые примеры работы команды expr.

$ expr "$Var_name" + 10

Если в переменной $Var_name находится строка, состоящая из цифр, вернет значение записанного числа, увеличенного на 10, в противном случае укажет на ошибку.

$ expr "$Var_name" : '.*'

Возвращает количество символов в переменной Var_name; если $Var_name=abсd, команда вернет 4;

$ expr “$filename” : '\(.*\).txt'

Возвращает имя файла без расширения. Если значение переменной $filename=abc.txt, то функция вернет значение abc; если файл имеет расширение .doc, то функция вернет пустую строку, так как не найдет обязательный фрагмент .txt в имени файла.

Команда expr возвращает собственный код завершения. Команда возвращает код, равный 1, если результат проверки – истина, любое другое значение – в противном случае (следует обратить внимание, что эти коды обратны кодам завершения последней команды, заносимым в переменную ?).

Например, проверка равенства строки "Hello" переменной H="Hello" даст следующий результат:

$ H="Hello"

$ expr $H = "Hello"

1

$ echo $?

0

$ expr $H = "Not"

0

$ echo $?

1

        1. Оператор цикла с перечислением for


Оператор цикла for имеет следующую структуру:

for имя переменной < in список значений >

do

список команд

done

Конструкция, указанная в < > является необязательной, а выделенные полужирным курсивом элементы являются служебным словам конструкции. Служебные слова dodoneопределяют тело цикла.

Простейшим примером, демонстрирующим работу цикла for, является вывод значений варьируемой переменной:

for i in аа bb c 4

do

echo $i

done

В результате на экран будут выведены значения

аа

bb

c

4

    1. 1.2.4. Функции в shell


Функции используются в языке Shell для комбинации нескольких команд с целью их последующего многократного совместного использования. Формат описания функции следующий:

function function_name [ ( ) ]

{

# action

}

Круглые скобки за именем функции являются необязательными.

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

function_name A B

Поскольку все переменные в Shell не имеют области видимости, любая переменная сценария может быть использована в функции. Единственным исключением являются позиционные параметры, которые не передаются в функцию. Ими становятся становятся аргументы самой функции. Так внутри функции в переменную $1 будет занесено значение А, а в переменную $2 – В; имя функции является ее нулевым параметром $0.
1   2   3   4   5   6


написать администратору сайта