Семинар кодирование информации общие сведения
Скачать 63.47 Kb.
|
Правила применения кавычек в ShellВ языке Shell кавычки оказывают существенно влияние на процесс интерпретации командных строк. Одинарные ' ' и двойные " " кавычкиОдинарные и двойные кавычки используются в программе для экранирования специальных символов и пробелов. Если переменная заключена в двойные кавычки, то все символы за исключением $, \ и ` будут восприниматься буквально, а указанные символы сохраняют свое специальное значение. При заключении переменной в одинарные кавычки, все метасимволы теряют свое специальное значение и интерпретируются как обычные символы. Так результатом выполнения команд $ echo 'per: ${maxi}' $ echo "per: ${maxi}" будет per: ${maxi} и per: 10 Обратные кавычки ` `Символы обратных кавычек позволяют присваивать переменным и передавать в команды результаты работы других системных команд (то есть передать данные вывода в команду). Все символы, которые заключены в обратные кавычки воспринимаются интерпретатором как системная команда, которую необходимо выполнить. Например, команда $ 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). Команда 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 Команда testTest – встроенная команда интерпретатора 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 может быть инвертирован при помощи использования символа ! , который изменяет результат тестирования: в случае успешной проверки код возврата будет равен 1 (FALSE – ложь). Команда тестирования, представленная [ ] , имеет расширенный вариант: [[ ]] Внутри [[ ]] разрешено использование операторов && (логическое И), || (логическое ИЛИ), которые недопустимы в [ ]. Выражения в команде test могут комбинироваться с помощью следующих операций: -а – логическое И; -о – логическое ИЛИ. Ниже приведены некоторые примеры использования команды test.
Условный оператор 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. Коды завершенияКаждая выполняемая в shell команда после выполнения возвращает так называемый код завершения. Для просмотра кода завершения последней выполненной команды достаточно вызвать команду: $ echo $? Общими системными командами используется два кода завершения: 0 – успешное завершение команды, ошибок нет; 1 – неудачное завершение команды, имеются ошибки. Язык позволяет реализовать пользовательский код завершения shell-сценария (например, с использованием команды exit). Он может быть использован другим shell-сценарием или функцией языка shell. Завершение сценария с генерацией кода считается хорошим тоном в программировании. Команда exitДля завершения текущего процесса в shell имеется команда exit. Команда имеет следующий формат: exit<число> Если вывести команду без параметра, shell отобразит значение последней команды. Принято считать, что значение exit = 0 – успешное завершение (ошибок нет); exit = 1 – неудачное завершение (имеется ошибка). В общем случае пользователь может указать любое значение кода завершения, указав его в качестве параметра команды exit. $ exit 2 Параметр команды exit может принимать значение от 0 до 255. Перенаправление потоков ввода-выводаМногие команды 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 Команда exprКоманда expr применяется в основном для вычисления выражений, но может быть применена и для обработки строк. Результат работы команды выводится на стандартный вывод stdout. Операнды выражения должны быть разделены пробелами, а метасимволы должны быть экранированы. Команда имеет следующую структуру expr<вычисляемое выражение> В таблице 1.11 приведено описание операторов, используемых в команде expr(некоторые операторы экранированы). Таблица 1.11 Операции команды expr
Ниже приведены некоторые примеры работы команды expr.
Команда expr возвращает собственный код завершения. Команда возвращает код, равный 1, если результат проверки – истина, любое другое значение – в противном случае (следует обратить внимание, что эти коды обратны кодам завершения последней команды, заносимым в переменную ?). Например, проверка равенства строки "Hello" переменной H="Hello" даст следующий результат: $ H="Hello" $ expr $H = "Hello" 1 $ echo $? 0 $ expr $H = "Not" 0 $ echo $? 1 Оператор цикла с перечислением forОператор цикла for имеет следующую структуру: for имя переменной < in список значений > do список команд done Конструкция, указанная в < > является необязательной, а выделенные полужирным курсивом элементы являются служебным словам конструкции. Служебные слова do – doneопределяют тело цикла. Простейшим примером, демонстрирующим работу цикла for, является вывод значений варьируемой переменной: for i in аа bb c 4 do echo $i done В результате на экран будут выведены значения аа bb c 4 1.2.4. Функции в shellФункции используются в языке Shell для комбинации нескольких команд с целью их последующего многократного совместного использования. Формат описания функции следующий: function function_name [ ( ) ] { # action } Круглые скобки за именем функции являются необязательными. Обращение к функции происходит по ее имени. При этом в функцию могут быть переданы аргументы, которые указываются через пробел сразу после имени функции: function_name A B Поскольку все переменные в Shell не имеют области видимости, любая переменная сценария может быть использована в функции. Единственным исключением являются позиционные параметры, которые не передаются в функцию. Ими становятся становятся аргументы самой функции. Так внутри функции в переменную $1 будет занесено значение А, а в переменную $2 – В; имя функции является ее нулевым параметром $0. |