Что записывает команда задать переменной значение
Перейти к содержимому

Что записывает команда задать переменной значение

Что записывает команда задать переменной значение

4. СРЕДА SHELL (ПЕРЕМЕННЫЕ И ПАРАМЕТРЫ)

На языке shell можно писать командные файлы и с помощью команды «chmod» делать их выполняемыми. После этого они ни чем не отличаются от прочих команд ОС UNIX.

4.1. shell-переменные

Имя shell-переменной — это начинающаяся с буквы последовательность букв, цифр и подчеркиваний.

Значение shell-переменной — строка символов.

То, что в shell всего два типа данных: строка символов и текстовый файл, с одной стороны, позволяет легко вовлекать в программирование конечных пользователей, никогда ранее программированием не занимавшихся, а с другой стороны, вызывает некий внутренний протест у многих программистов, привыкших к существенно большему разнообразию и большей гибкости языковых средств.

Однако интересно наблюдать то, как высококлассные программисты, освоившись с «правилами игры» shell, пишут на нем программы во много раз быстрее, чем на Си, но, что особенно интересно, в ряде случаев эти программы работают даже быстрее, чем реализованные на Си. (Но это уже случаи «высшего пилотажа»).

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

Для присваивания значений переменным может использоваться оператор присваивания » 13″ — это не число, а строка из двух цифр. var_2=»ОС UNIX» — здесь двойные кавычки (» «) необходимы, так как в строке есть пробел.

ВАЖНО: Обратим внимание на то, что, как переменная, так и ее значение должны быть записаны без пробелов относительно символа «=». Кстати, как видно из примеров, первым словом в командной строке может стоять не только имя команды, но и присваивание значения переменной. Об этом как раз и говорит наличие в беспробельной строке символов наличие (незаэкранированного) символа » date» (обратные кавычки говорят о том, что сначала должна быть выполнена заключенная в них команда), а результат ее выполнения, вместо выдачи на стандартный выход, приписывается в качестве значения переменной, в данном случае «DAT».

Можно присвоить значение переменной и с помощью команды «read», которая обеспечивает прием значения переменной с (клавиатуры) дисплея в диалоговом режиме. Обычно команде «read» в командном файле предшествует команда «echo», которая позволяет предварительно выдать какое-то сообщение на экран. Например:

При выполнении этого фрагмента командного файла, после вывода на экран сообщения

интерпретатор остановится и будет ждать ввода значения с клавиатуры. Если вы ввели, скажем, «753» то это и станет значением переменной «x».

Одна команда «read» может прочитать (присвоить) значения сразу для нескольких переменных. Если переменных в «read» больше, чем их введено (через пробелы), оставшимся присваивается пустая строка. Если передаваемых значений больше, чем переменных в команде «read», то лишние игнорируются.

При обращении к shell-переменной необходимо перед именем ставить символ «$». Так команды выдадут на экран

И еще один пример. Фрагмент командного файла: выдаст на экран

В команде «echo» первое использование «var_2» — это просто текст, а второе («$var_2») — это значение соответствующей переменной.

То что здесь присутствуют пробелы между именем переменной и символом присваивания, а также между символом присваивания и значением, так это потому, что здесь мы имеем дело лишь с текстом, куда подставлены значения переменных. Там, где действительно выполняется присваивание, пробелы в этих местах НЕДОПУСТИМЫ. Присваивание, скажем, w= означает присваивание переменной «w» пустой строки. Но и пустую строку лучше присваивать аккуратно, например w=»».

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

Пусть a=/mnt/lab/asu/
тогда и

равноценны (т.е. «cat» выдаст на экран содержимое одного и того же файла).

Если также предположить, что в системе есть переменная «prim» и «prim=dir» , то команда выдаст на экран

4.2. Экранирование

Рассмотрим более подробно приемы экранирования, используемые в shell. В качестве средств экранирования используются двойные кавычки (» «), одинарные кавычки (‘ ‘) и бэк-слэш (\).

Из примеров очевидно их действие:

Можно в одной строке записывать несколько приcваиваний.

(присваивание G=$x + $y не было бы выполнено из-за пробелов)
Тогда Выдадут на экран

Еще один пример на «eval».

Пусть В результате выполнения команд на экран будет выведено

Приведем еще примеры, связанные с экранированием перевода строки. Пусть переменной «string» присвоено значение «массива» 2×3:

Обратим внимание, что для избежания присваивания лишних пробелов вторая строка массива начата с первой позиции следующей строки: Тогда три варианта записи переменной в команде «echo» дадут соответственно три различных результата: а последовательность команд даст выдаст последовательно одинаковые файлы f1 и f2:

Заметим также, что бэк-слэш (\) не только экранирует следующий за ним символ, что позволяет использовать специальные символы просто как символы, представляющие сами себя (он может экранировать и сам себя — \\), но в командном файле бэк-слэш позволяет об’единять строки в одну (экранировать конец строки).

Например, приводившийся ранее пример командной строки: может быть записан в командном файле, скажем, как

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

4.3. Манипуляции с shell-переменными

Несмотря на то, что shell-переменные в общем случае воспринимаются как строки, т. е. «35» — это не число, а строка из двух символов «3» и «5», в раде случаев они могут интерпретироваться иначе, например, как целые числа.

Разнообразные возможности имеет команда «expr».

Проиллюстрируем некоторые на примерах:

Выполнение командного файла: выдаст на экран

С командой «expr» возможны не только (целочисленные) арифметические операции, но и строковые:

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

И наконец, об условной замене переменных.

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

4.4. Экспорт переменных

В ОС UNIX существует понятие процесса. Процесс возникает тогда, когда запускается на выполнение какая-либо команда (расчет).

Например, при наборе на клавиатуре «р <Enter>» порождается процесс расчета «р». В свою очередь «р» может породить другие процессы. Допустим, что «р» вызывает расчеты «р1» и «р2», которые последовательно порождают соответствующие процессы.

У каждого процесса есть своя среда — множество доступных ему переменных. Например, до запуска расчета «р» уже существовала среда, в которой уже были определены некоторые переменные (о стандартных переменных речь пойдет несколько позже). Запуск «р» порождает новую среду; уже в ней будут порождены расчеты «р1» и «р2».

Переменные локальны в рамках процесса, в котором они объявлены, т.е. где им присвоены значения (описание переменных отсутствует — они все одного типа). Для того, чтобы они были доступны и другим порождаемым процессам, надо передать их явным образом. Для этого используется встроенная команда «export».

Пусть расчет (командный файл) «p», имеющий вид: вызывает командные файлы «p1» и «p2», имеющие вид: На экран будут выданы следующая информация:

Из примера видно, что значения переменных экспортируются только в вызываемые расчеты (и не передаются «вверх» и «вбок»). Экспортировать переменные можно и командой «set» с флагом «-a».

4.5. Параметры

В командный файл могут быть переданы параметры. В shell используются позиционные параметры (т.е. существенна очередность их следования). В командном файле соответствующие параметрам переменные (аналогично shell-переменным) начинаются с символа «$», а далее следует одна из цифр от 0 до 9:

Пусть расчет «examp-1» вызывается с параметрами «cock» и «tail». Эти параметры попадают в новую среду под стандартными именами «1» и «2». В (стандартной) переменной с именем «0» будет храниться имя вызванного расчета.

Пусть командный файл с именем «examp-1» имеет вид а файлы «cock» и «tail» содержат соответственно Это отсортированный файл: Тогда после вызова команды на экране будет

Поскольку число переменных, в которые могут передаваться параметры, ограничено одной цифрой, т.е. 9-ю («0», как уже отмечалось имеет особый смысл), то для передачи большего числа параметров используется специальная команда «shift».

Рассмотрим ее действие на примере.

Пусть командный файл «many» вызывается с 13-ю параметрами И имеет вид

В результате первого применения команды «shift» второй параметр расчета вызывается как $1, третий параметр вызывается как $2, . десятый параметр, который был исходно недоступен, вызывается как $9. Но стал недоступным первый параметр!

После выполнения этого расчета на экране будет: Своеобразный подход к параметрам дает команда «set».

Например, фрагмент расчета выдаст на экран

т.е. команда «set» устанавливает значения параметров. Это бывает очень удобно. Например, команда «date» выдает на экран текущую дату, скажем, «Mon May 01 12:15:10 2000», состоящую из пяти слов, тогда выдаст на экран

Команда «set» без параметров выводит на терминал состояние программной среды (см далее).

4.6. Подстановки shell-интерпретатора

  1. ПОДСТАНОВКА РЕЗУЛЬТАТОВ. Выполняются все команды, заключенные в обратные кавычки, и на их место подставляется результат.
  2. ПОДСТАНОВКА ЗНАЧЕНИЙ ПАРАМЕТРОВ И ПЕРЕМЕННЫХ. То есть слова, начинающиеся на «$», заменяются соответствующими значениями переменных и параметров.
  3. ИНТЕРПРЕТАЦИЯ ПРОБЕЛОВ. Заэкранированные пробелы игнорируются.
  4. ГЕНЕРАЦИЯ ИМЕН ФАЙЛОВ. Проверяются слова на наличие в них спецсимволов («*», «?»,»[]») и выполняются соответствующие генерации.

4.7. Программная среда

Каждый процесс имеет среду, в которой он выполняется. Shell использует ряд переменных этой среды.

Если вы наберете команду «set» без параметров, то на экран будет выдана информация о ряде стандартных переменных, созданных при входе в систему (и передаваемых далее всем вашим новым процессам «по наследству»), а также переменных, созданных и экспортируемых вашими процессами.

Конкретный вид и содержание выдаваемой информации в немалой степени зависит от того, какая версия UNIX используется и как инсталлирована система.

Вот лишь часть того, что выдала мне команда «set»:

После набора командной строки и нажатия <Enter> "shell" (после выполнения необходимых подстановок) распознает имя, соответствующее команде и осуществляет ее поиск в директориях, перечисленных в тропе. Если команда размещена вне этих директориев, она не будет найдена. Если присутствует несколько команд с одинаковым именем, то вызвана будет та, которая расположена в директории, просматриваемом первым.

x=5

переменные, которые ввел пользователь.

Исходная среда устанавливается автоматически при входе в систему с использованием файлов типа «/etc/rc» и «/etc/.profile».

Если вы внесли изменения в «.profile», то для переноса этих изменений в среду необходимо выполнить этот файл. Для этого можно выйти и заново войти в систему, а можно воспользоваться (специально для этого случая созданной) командой «.» без выхода из системы, т.е.

Следует иметь в виду, что имена файлов, начинающиеся с точки, вообще имеют особый статус. Так, они не выдаются на экран простой командой «ls» — необходимо вызывать эту команду с флагом «-a». Кстати, и не уничтожаются огульно командой «rm *».

Дописать новый свой директорий «my» в тропу команд можно, записав в «.profile», например или Как правило, устанавливаемые переменные среды следует экспортировать. Например, Кроме определения переменных в «.profile» можно выполнить команды, например команда установит терминал в режим «большие и маленькие буквы»; а команда

выдаст на экран заставку , которую вы сами подготовите в файле «заставка» с учетом ваших эстетических пристрастий и художественных способностей.

При обращении к этим переменным (т.е при использовании их в командном файле — shell-программе) следует впереди ставить «$».

Пример. Вызов расчета имеющего вид Выдаст на экран

Код «0» соответствует нормальному завершению процесса.

Важную роль при создании уникальных файлов играет специальная переменная «$$», значение которой соответствует номеру процесса, выполняющего данный расчет. Каждый новый расчет, выполняемый компьютером, инициирует один или несколько процессов, автоматически получающих номера по порядку. Поэтому, используя номер процесса в качестве имени файла, можно быть уверенным, что каждый новый файл будет иметь новое имя (не запишется на место уже существующего). Достоинство является и главным недостатком такого способа именования файлов. Неизвестно, какие имена будут присвоены файлам. И, если в рамках данного процесса можно найти файл «не глядя», т.е., обратившись к нему, используя $$, то потом такие файлы можно легко потерять. Это создает дополнительные проблемы при отладке программ.

«echo» без параметров выводит пустую строку.

Различия $* и $@ состоит в том, что первая переменная может быть представлена как а вторая как

Пример, иллюстрирующий различия «$*» и «$@» будет рассмотрен в связи с оператором «for».

Для иллюстрации мы установили командой «set» режимы интерпретатора («a» — все последующие переменные экспортируются; «u» — отсутствие параметра считать ошибкой), что и отразилось в специальной переменной «$-«.

Что записывает команда задать переменной значение

Все переменные на языке Паскаль должны быть описаны в «голове» программы, в разделе VAR.

В программе строка VAR называется описанием переменных величин а и b. Описание начинается со служебного слова VAR (сокращение от английского variable — переменная). После него записываются имена всех переменных, встречающихся в программе с указанием через двоеточие типа значений, которые каждая переменная имеет право принимать.

СПРАВКА

Зачем нужно описание?

После того, как программист ввел программу в память, он приказывает компьютеру ее исполнить. Но компьютер при этом не сразу принимается выполнять программу, а сначала совершает компиляцию, то есть перевод программы с Паскаля на собственный машинный язык. (Часто вместо термина «компиляция» употребляют более общий термин «трансляция»). Во время компиляции компьютер производит некоторые подготовительные действия, одним из которых является отведение в памяти места под переменные величины, упомянутые в программе. При этом компьютер «рассуждает» так: Раз в программе упомянута переменная величина, значит она в каждый момент времени будет иметь какое-то значение, которое, хочешь не хочешь, надо помнить. Лучше, чтобы не спутаться, заранее отвести в памяти определенное место для запоминания текущего значения каждой переменной величины и только потом уже выполнять программу. Будем называть место, отведенное в памяти под данную переменную, ячейкой.

Присваивание:
Что можно делать с переменными величинами, программируя на Паскале? Прежде всего, задавать компьютеру значение той или иной переменной величины. Это можно сделать при помощи нового оператора, который называется оператором присваивания .
Так, если необходимо чтобы переменная а имела значение 6 , то нужно записать а := 6 .
Знак := называется знаком присваивания , а сама запись а:=6 называется оператором присваивания. Говорят, что величине а присваивается значение 6 . С момента выполнения оператора а:=6 компьютер будет помнить, что а равно шести.

Справа от значка := в операторе присваивания можно писать не только числа, но и переменные величины, и выражения.

Например, после выполнения следующего фрагмента программы:

компьютер будет знать, то a равно 10 , b равно 10 , y равно 21 .

Еще несколько примеров:

ФРАГМЕНТ ПРОГРАММЫ ЧТО ЗАПОМНИТ КОМПЬЮТЕР
v := -2+10;
h := 10*v;
s := v+h
v=8 h=80 s=88
t := 0;
n := 2*t+40;
z := -n
t=0 n=40 z= -40
Задание 1: запишите заданный фрагмент в виде программы, выполните ее и запишите в тетради, что выводится на экране.
Ввод данных:
Сравним две программы решения задачи:

Программы отличаются только одной строкой. Первая программа не требует пояснений — она печатает число 36. Во второй программе нигде не сказано, чему равны a и b , а вместо этого включен оператор ReadLn, который ждет ввода значений переменных с клавиатуры.

ReadLn читается «рид’лайн», переводится «читай строку». Он приказывает компьютеру остановиться и ждать, когда человек введет с клавиатуры определенную информацию, после чего продолжить работу. В частности, ReadLn (a,b) будет ждать ввода двух целых чисел.

Если первая программа после запуска будет работать без остановки до самого конца и без хлопот выдаст результат, то вторая программа на операторе ReadLn остановится и будет ждать. Во время этого ожидания человек должен на клавиатуре набрать число 20 (так как первым в списке оператора ReadLn стоит a ), затем нажать клавишу пробела, затем набрать 16 и нажать клавишу Enter. В соответствии с этим компьютер сразу же после нажатия Enter прекращает ожидание и прежде всего направляет число 20 в память, в ячейку a , число же 16 — в ячейку b . На этом он считает выполнение оператора ReadLn законченным и переходит к следующему оператору — WriteLn. В результате будет напечатано число 36.

Таким образом, обе программы делают одно и то же. Зачем же тогда применять ReadLn вместо оператора присваивания? Ведь первая программа понятней, да и работает без остановки.

Bash-скрипты: начало

Сегодня поговорим о bash-скриптах. Это — сценарии командной строки, написанные для оболочки bash. Существуют и другие оболочки, например — zsh, tcsh, ksh, но мы сосредоточимся на bash. Этот материал предназначен для всех желающих, единственное условие — умение работать в командной строке Linux.

Сценарии командной строки — это наборы тех же самых команд, которые можно вводить с клавиатуры, собранные в файлы и объединённые некоей общей целью. При этом результаты работы команд могут представлять либо самостоятельную ценность, либо служить входными данными для других команд. Сценарии — это мощный способ автоматизации часто выполняемых действий.

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

На самом деле, если вы опробовали это в своём терминале, ваш первый bash-скрипт, в котором задействованы две команды, уже написан. Работает он так. Сначала команда pwd выводит на экран сведения о текущей рабочей директории, потом команда whoami показывает данные о пользователе, под которым вы вошли в систему.

Используя подобный подход, вы можете совмещать сколько угодно команд в одной строке, ограничение — лишь в максимальном количестве аргументов, которое можно передать программе. Определить это ограничение можно с помощью такой команды:

Командная строка — отличный инструмент, но команды в неё приходится вводить каждый раз, когда в них возникает необходимость. Что если записать набор команд в файл и просто вызывать этот файл для их выполнения? Собственно говоря, тот файл, о котором мы говорим, и называется сценарием командной строки.

Как устроены bash-скрипты

Создайте пустой файл с использованием команды touch . В его первой строке нужно указать, какую именно оболочку мы собираемся использовать. Нас интересует bash , поэтому первая строка файла будет такой:

В других строках этого файла символ решётки используется для обозначения комментариев, которые оболочка не обрабатывает. Однако, первая строка — это особый случай, здесь решётка, за которой следует восклицательный знак (эту последовательность называют шебанг) и путь к bash , указывают системе на то, что сценарий создан именно для bash .

Команды оболочки отделяются знаком перевода строки, комментарии выделяют знаком решётки. Вот как это выглядит:

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

Установка разрешений для файла сценария

Сохраните файл, дав ему имя myscript , и работа по созданию bash-скрипта почти закончена. Сейчас осталось лишь сделать этот файл исполняемым, иначе, попытавшись его запустить, вы столкнётесь с ошибкой Permission denied .

Попытка запуска файла сценария с неправильно настроенными разрешениями

Сделаем файл исполняемым:

Теперь попытаемся его выполнить:

После настройки разрешений всё работает как надо.

Успешный запуск bash-скрипта

Вывод сообщений

Для вывода текста в консоль Linux применяется команда echo . Воспользуемся знанием этого факта и отредактируем наш скрипт, добавив пояснения к данным, которые выводят уже имеющиеся в нём команды:

Вот что получится после запуска обновлённого скрипта.

Вывод сообщений из скрипта

Теперь мы можем выводить поясняющие надписи, используя команду echo . Если вы не знаете, как отредактировать файл, пользуясь средствами Linux, или раньше не встречались с командой echo , взгляните на этот материал.

Использование переменных

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

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

Существуют два типа переменных, которые можно использовать в bash-скриптах:

  • Переменные среды
  • Пользовательские переменные

Переменные среды

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

Обратите внимание на то, что мы можем использовать системную переменную $HOME в двойных кавычках, это не помешает системе её распознать. Вот что получится, если выполнить вышеприведённый сценарий.

Использование переменной среды в сценарии

А что если надо вывести на экран значок доллара? Попробуем так:

Система обнаружит знак доллара в строке, ограниченной кавычками, и решит, что мы сослались на переменную. Скрипт попытается вывести на экран значение неопределённой переменной $1 . Это не то, что нам нужно. Что делать?

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

Теперь сценарий выведет именно то, что ожидается.

Использование управляющей последовательности для вывода знака доллара

Пользовательские переменные

В дополнение к переменным среды, bash-скрипты позволяют задавать и использовать в сценарии собственные переменные. Подобные переменные хранят значение до тех пор, пока не завершится выполнение сценария.

Как и в случае с системными переменными, к пользовательским переменным можно обращаться, используя знак доллара:

Вот что получится после запуска такого сценария.

Пользовательские переменные в сценарии

Подстановка команд

Одна из самых полезных возможностей bash-скриптов — это возможность извлекать информацию из вывода команд и назначать её переменным, что позволяет использовать эту информацию где угодно в файле сценария.

Сделать это можно двумя способами.

  • С помощью значка обратного апострофа «`»
  • С помощью конструкции $()

При втором подходе то же самое записывают так:

А скрипт, в итоге, может выглядеть так:

В ходе его работы вывод команды pwd будет сохранён в переменной mydir , содержимое которой, с помощью команды echo , попадёт в консоль.

Скрипт, сохраняющий результаты работы команды в переменной

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

Для выполнения математических операций в файле скрипта можно использовать конструкцию вида $((a+b)) :

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

Управляющая конструкция if-then

В некоторых сценариях требуется управлять потоком исполнения команд. Например, если некое значение больше пяти, нужно выполнить одно действие, в противном случае — другое. Подобное применимо в очень многих ситуациях, и здесь нам поможет управляющая конструкция if-then . В наиболее простом виде она выглядит так:

А вот рабочий пример:

В данном случае, если выполнение команды pwd завершится успешно, в консоль будет выведен текст «it works».

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

Вот что получается после запуска этого скрипта.

Поиск пользователя

Здесь мы воспользовались командой grep для поиска пользователя в файле /etc/passwd . Если команда grep вам незнакома, её описание можно найти здесь.

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

Управляющая конструкция if-then-else

Для того, чтобы программа смогла сообщить и о результатах успешного поиска, и о неудаче, воспользуемся конструкцией if-then-else . Вот как она устроена:

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

Напишем такой скрипт:

Его исполнение пошло по ветке else .

Запуск скрипта с конструкцией if-then-else

Ну что же, продолжаем двигаться дальше и зададимся вопросом о более сложных условиях. Что если надо проверить не одно условие, а несколько? Например, если нужный пользователь найден, надо вывести одно сообщение, если выполняется ещё какое-то условие — ещё одно сообщение, и так далее. В подобной ситуации нам помогут вложенные условия. Выглядит это так:

Если первая команда вернёт ноль, что говорит о её успешном выполнении, выполнятся команды в первом блоке then , иначе, если первое условие окажется ложным, и если вторая команда вернёт ноль, выполнится второй блок кода.

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

Сравнение чисел

В скриптах можно сравнивать числовые значения. Ниже приведён список соответствующих команд.

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

Вот что выведет эта команда.

Сравнение чисел в скриптах

Значение переменной val1 больше чем 5, в итоге выполняется ветвь then оператора сравнения и в консоль выводится соответствующее сообщение.

Сравнение строк

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

Вот пример сравнения строк в сценарии:

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

Сравнение строк в скриптах

Вот одна особенность сравнения строк, о которой стоит упомянуть. А именно, операторы «>» и «<» необходимо экранировать с помощью обратной косой черты, иначе скрипт будет работать неправильно, хотя сообщений об ошибках и не появится. Скрипт интерпретирует знак «>» как команду перенаправления вывода.

Вот как работа с этими операторами выглядит в коде:

Вот результаты работы скрипта.

Сравнение строк, выведенное предупреждение

Обратите внимание на то, что скрипт, хотя и выполняется, выдаёт предупреждение:

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

Теперь всё работает как надо.

Сравнение строк

Ещё одна особенность операторов «>» и «<» заключается в том, как они работают с символами в верхнем и нижнем регистрах. Для того, чтобы понять эту особенность, подготовим текстовый файл с таким содержимым:

Сохраним его, дав имя myfile , после чего выполним в терминале такую команду:

Она отсортирует строки из файла так:

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

Если его запустить, окажется, что всё наоборот — строчная буква теперь больше прописной.

Команда sort и сравнение строк в файле сценария

В командах сравнения прописные буквы меньше строчных. Сравнение строк здесь выполняется путём сравнения ASCII-кодов символов, порядок сортировки, таким образом, зависит от кодов символов.

Команда sort , в свою очередь, использует порядок сортировки, заданный в настройках системного языка.

Проверки файлов

Пожалуй, нижеприведённые команды используются в bash-скриптах чаще всего. Они позволяют проверять различные условия, касающиеся файлов. Вот список этих команд.

Эти команды, как впрочем, и многие другие рассмотренные сегодня, несложно запомнить. Их имена, являясь сокращениями от различных слов, прямо указывают на выполняемые ими проверки.

Опробуем одну из команд на практике:

Этот скрипт, для существующей директории, выведет её содержимое.

Вывод содержимого директории

Полагаем, с остальными командами вы сможете поэкспериментировать самостоятельно, все они применяются по тому же принципу.

Итоги

Сегодня мы рассказали о том, как приступить к написанию bash-скриптов и рассмотрели некоторые базовые вещи. На самом деле, тема bash-программирования огромна. Эта статья является переводом первой части большой серии из 11 материалов. Если вы хотите продолжения прямо сейчас — вот список оригиналов этих материалов. Для удобства сюда включён и тот, перевод которого вы только что прочли.

    — здесь речь идёт о том, как начать создание bash-скриптов, рассмотрено использование переменных, описаны условные конструкции, вычисления, сравнения чисел, строк, выяснение сведений о файлах.

— тут раскрываются особенности работы с циклами for и while.

— этот материал посвящён параметрам командной строки и ключам, которые можно передавать скриптам, работе с данными, которые вводит пользователь, и которые можно читать из файлов.

— здесь речь идёт о дескрипторах файлов и о работе с ними, о потоках ввода, вывода, ошибок, о перенаправлении вывода.

— этот материал посвящён сигналам Linux, их обработке в скриптах, запуску сценариев по расписанию.

— тут можно узнать о создании и использовании функций в скриптах, о разработке библиотек.

— эта статья посвящена работе с потоковым текстовым редактором sed.

— данный материал посвящён программированию на языке обработки данных awk.

— тут можно почитать об использовании регулярных выражений в bash-скриптах.

— здесь приведены приёмы работы с сообщениями, которые можно отправлять пользователям, а так же методика мониторинга диска.

Уважаемые читатели! Просим гуру bash-программирования рассказать о том, как они добрались до вершин мастерства, поделиться секретами, а от тех, кто только что написал свой первый скрипт, ждём впечатлений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *