admin / 01.05.2018

bash — Как использовать значение переменной как другое имя переменной в bash — Qaru

Что такое Bash в Linux?

Возможно, что вы уже не раз слышали это непонятное слово: Вash. Лично я только сегодня узнал, что оно обозначает точно, а раньше имел очень смутное представление, хоть каждый день пользовался Bash.

И вот я решил заполнить этот пробел и немного просветить и вас, и себя за одно.

Что такое Bash?

Bash означает Bourne Again Shell. Это англоязычная игра слов: bash построена на основе оболочки Борна (bourne), которая, наряду с оболочкой Korn и С, считается одной из классических оболочек UNIX (again — с англ. «снова»).

В Linux можно работать и с двумя другими классическими оболочками, но по умолчанию обычно установлена оболочка bash. Если вы интересуетесь bash-программированием, то в сети не трудно найти подборки важнейших элементов этого языка и разнообразные примеры.

Если же вы работаете только с программой 1С, то всегда интересуйтесь обновлением 1С, это важно для стабильной работы программы.

Так что же такое оболочка?

Оболочка в первую очередь предназначена для вызова команд и программ Linux. Таким образом, она является своего рода интерпретатором команд (сравнимым с команда.com из мира MS-DOS). Оболочка выполняется в любом командном окне, например konsole, gnome-terminal, xterm, и в любой текстовой консоли после входа в систему (логина).

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

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

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

user$ echo $0 -bash user$ $BASH_VERSION 4.2.29(1)-release

Документация по Bash.

В справке man оболочке bash посвящен большой раздел. Кроме того, есть объемный справочный материал, который выводится командой info bash. Разумеется, этот файл есть и в Интернете: www.gnu.org/software/bash/manual/bash.html.

Почти во всех дистрибутивах Linux bash считается стандартной оболочкой для работы с оболочками и окнами терминалов. Однако, воспользовавшись системой управления пакетами вашего дистрибутива, вы можете установить и многие другие оболочки. Профессионалы Linux особенно любят Z-оболочку zsh.

Другие варианты — оболочки Korn (ksh или pdksh) и C (csh или tcsh). Чтобы опробовать любую из этих оболочек после установки, запустите командное окно и введите в него имя любой оболочки. Команда exit выведет вас обратно в предыдущую активную оболочку.

user$ zsh hostname% ls (Выполнение команд в zsh) … hostname% exit (Обратно в предыдущую оболочку) user$

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

Чтобы задать по умолчанию другую оболочку, выполните команду chsh (change shell). Программы оболочки сохраняются в каталоге /bin. Это значит, что требуется указать, например, /bin/csh в том случае, если вы собираетесь в дальнейшем работать с оболочкой C.

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

Опубликовано © Просто Linux | Всё про Линукс, Android и Windows.

Re: [bash] Присвоение результатов команды переменной

man bash

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

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

Что такое Bash в Linux?

Имеется две формы такой подстановки:

$(команда)

или

`команда`

Командный интерпретатор bash делает эту подстановку путем выполнения команды и замены конструкции подстановки содержимым стандартного выходного потока команды, из которого удалены завершающие переводы строк. Встроенные переводы строк не удаляются, но они могут быть удалены при разбиении на слова. Подстановку результатов выполнения команды $(cat file) можно заменить эквивалентной, но более быстрой: $(< file).

При использовании старой формы подстановки в обратных апострофах обратная косая интерпретируется как литерал, если только после нее не идут символы $, ` или \. Первый же обратный апостроф, не замаскированный обратной косой, завершает подставляемую команду. При использовании формы $(команда) все символы между круглыми скобками образуют команду — ни один не имеет специального значения.

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

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

dGhost★★★ ()

Разница между sh и bash

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

\ Экранирование. Отменяет специальное значение следующего символа
\\ Символ "\"

# Комментарий, не работает в кавычках и в некоторых подстановках переменных и преобразовании основания чисел
echo "Это #не комментарий"
echo 'Это # не комментарий’
echo Это \# не комментарий
echo Это # Вот комментарий.
echo ${PATH#*:} #Специальная переменная
echo $(( 2#101011 )) #Преобразование системы счисления в арифметической подстановке.

>, >> — перенаправление стандартного вывода программы в файл
< — перенаправление стандартного ввода программы из файла
<<TERM перенаправление стандартного ввода программы из текста текущего скрипта со следующей строки до строки, состоящей из слова TERM.
|- перенаправление стандартного вывода программы на стандартный ввод другой программы

; Разделитель команд в строке
echo hello; echo there

;; Разделитель альтернатив в операторе case
case "$VARiable" in
abc) echo "$VARiable = abc" ;;
xyz) echo "$VARiable = xyz" ;;
esac

.

Аналог команды source (#include в С++). Выполняет скрипт в текущем интерпретаторе.
. myconf

".." Двойные кавычки, отменяют действие спецсимволов кроме $ `..` и \

'…' Апострофы, отменяют действие всех спецсимволов в том числе и \, по этому нельзя включить апостроф в строку ограниченную апострофами

: Нулевая команда, всегда возвращает нулевой код ответа.

В сочетании с перенаправлением ">" создает файл, или обнуляет существующий. В сочетании с перенаправлением ">>" создает файл, или изменяет время модификации существующего
:> data.xxx # File “data.xxx” now empty.
(можно и без двоеточия)

Шаблоны в именах файлов. Если подходящие имена находятся, то они подставляются в командную строку как отдельные аргументы (возможно с пробелами внутри). Если имена не находятся, то шаблон остается как есть.

* Шаблон заменяющий любую последовательность символов
? Шаблон заменяющий ровно один символ
[xyz] Шаблон заменяющий один из перечисленных символов
{xxx,yyy,zzz,…} Подстановка одного из вариантов в шаблон. В скобках не должно быть неэкранированных пробелов
grep Linux file*.{txt,htm*} # Ищет слово “Linux” в файлах вида “fileA.txt”, “file2.txt”, “fileR.html”, “file-87.htm”, etc.

$ Подстановка значения переменной, арифметического выражения или стандартного вывода программы. Если значение содержит пробелы, то при подстановке оно разбивается на отдельные аргументы.
$A содержимое переменной A
$$ PID процесса
$? Код возврата из последней выполненной программы или функции, а также код возврата самого скрипта
$((2*2)) подстановка результата вычисления арифметического выражения
$(cmd) подстановка стандартного вывода программы
`…` тоже, что и $(…) – подстановка стандартного вывода программы

Пример: A=EE; echo $A $(echo QQ) $((7+5))
Результат: EE QQ 12
Ошибка: $A=ZZ
Результат: bash: EE=ZZ: command not found

(…) Группировка команд
(A=hello; echo $A)
Для выполнения группы в скобках запускается новый интерпретатор
A=123
(A=321)
echo A = $A # A = 123
# "A" внутри скобок – локальная переменная.

(…) Создание массива ( только в bash версии > 2)
Array=(element1 element2 element3)

[] Элемент массива ( только в bash версии > 2)
Array[1]=slot_1
echo ${Array[1]}

{1..10} — подстановка чисел от 1 до 10
{c..n} — подстановка символов от "c" до "n"

{…} Создание безымянной функции, удобно для перенаправления ввода/вывода нескольких команд в один файл. В отличие от настоящей функции видимости переменных не изменяется.
PACK=mysql
{
echo
echo "Archive Listing:"
rpm -qpl ${PACK} # Список фалов в пакете rpm
echo
rpm -i —test ${PACK} # Проверка, установлен ли пакет.
} > "${PACK}.txt" #И весь вывод в один файл.

[…] Встроенная функция test для вычисления логических выражений

((…)) Арифметическая подстановка, вычисляет арифметическое выражение в стиле языка Си внутри скобок

& — запуск программы в фоновом режиме
bash$ sleep 10 &
[1] 850
[1]+ Done sleep 10

Вывод переменной скрипта Bash

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

Основные команды Bash

Это команда, когда я запускаю ее вручную:

  • Awk — выводит вторую строку из нескольких файлов .dat в один файл
  • В чем разница между вызовом скрипта perl через sh или perl
  • В чем разница между «==» и «= ~»?
  • Как удалить все, кроме последнего вхождения строки?
  • Получить переменную из строки
  • Сценарий оболочки работает при сохранении с помощью nano, но не при сохранении с помощью Notepad ++
  • и оно показывает

    Это в скрипте:

    но все же он выводит это

    Я должен что-то упустить. Я попытался удвоить «» и «», чтобы окружить Mac-адрес, но он не работает.

    Какие-либо предложения?

    Основы BASH

    =

    равно

    ==

    равно

    Синоним оператора =.

    [[ $a == z* ]] # истина, если $a начинается с символа "z" (сравнение по шаблону) [[ $a == "z*" ]] # истина, если $a равна z* [ $a == z* ] # имеют место подстановка имен файлов и разбиение на слова [ "$a" == "z*" ] # истина, если $a равна z* # Спасибо S.C.

    !=

    не равно

    Этот оператор используется при поиске по шаблону внутри [[ … ]].

    <

    меньше, в смысле величины ASCII-кодов

    Обратите внимание! Символ "<" необходимо экранировать внутри .

    >

    больше, в смысле величины ASCII-кодов

    Обратите внимание! Символ ">" необходимо экранировать внутри .

    См. Пример 25-6 относительно применения этого оператора сравнения.

    -z

    строка "пустая", т.е. имеет нулевую длину

    -n

    строка не "пустая".

    Оператор требует, чтобы строка была заключена в кавычки внутри квадратных скобок. Как правило, проверка строк, не заключенных в кавычки, оператором , или просто указание строки без кавычек внутри квадратных скобок (см. Пример 7-6), проходит нормально, однако это небезопасная, с точки зрения отказоустойчивости, практика. Всегда заключайте проверяемую строку в кавычки.

    Bash в примерах. Часть первая.

    Основы программирования в bash

    Введение

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

    Bash уже есть у вас в системе

    Если вы проверите, то скорее всего обнаружите, что bash уже запущен у вас в системе. Даже если вы используете другой shell в качестве командного интерпретатора, bash наверняка установлен, потому что он является стандартной командной оболочкой в линуксе. Так как bash уже запущен, выполнение скриптов написанных на bash-е является эффективным, потому что они разделяют часть оперативной памяти с уже запущенным процессом bash. Да и зачем загружать еще один интерпретатор, если у вас уже есть bash, который справляется со своей работой и делает это хорошо?

    Вы уже используете его

    Но bash не просто запущен в вашей системе, вы еще ежедневно взаимодействуете с ним. Он всегда рядом, так что есть смысл научиться управляться с ним чтобы полноценно использовать все его возможности. После этого ваше общение с линуксом станет намного веселее и продуктивнее. Но почему вы должны учиться программировать? Все просто: вы уже мыслите в терминах исполнения программ, копирования файлов и перенаправления вывода программ. Не должны ли вы теперь изучить язык, который позволит вам строить из этих простых элементов мощные и экономящие ваше время конструкции с использованием которых вы уже знакомы? Командная оболочка открывает перед вами весь потенциал UNIX. А bash это командная оболочка линукс. Он связывает вас с компьютером. Изучив bash, вы автоматически увеличите свою производительность использования UNIX или Linux — все настолько просто.

    Перед началом

    Неправильный подход к изучению языка bash может сбить вас с толку. Многие новички вводят команду man bash чтобы прочитать страницу со справкой, которая содержит только краткое техническое описание функционала командной оболочки. Другие вызывают info bash (чтобы посмотреть документацию в формате info), но получают или ту же страницу мануала или немногим более удобный для пользователя материал.

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

    Эта серия статей поможет вам освоиться в командной строке. В этом пособии описано как использовать основные синтаксические конструкции языка shell для написания своих скриптов. Я постараюсь объяснить все простым языком, чтобы вы не только поняли как это все работает, но и разобрались как это использовать. Прочитав эту серию статей, вы научитесь писать свои собственные скрипты и будете комфортно себя чувствовать в командной строке. После этого вы сможете пополнять свои знания читая (и понимая!) стандартную документацию по bash. Давайте начнем.

    Переменные окружения

    В bash как и практически во всех остальных командных оболочках пользователь может создавать и определять свои переменные окружения, которые хранятся как текстовые (ASCII) строки. Одно из самых полезных свойств переменных окружения заключается в том, что они являются стандартной частью модели процессов в UNIX. Это значит, что переменные окружения могут использовать не только скрипты командной оболочки, но и компилированные программы. Когда мы экспортируем переменную окружения в bash, любая программа запущенная нами получает к ней доступ.

    Хорошим примером служит команда vipw, которая позволяет руту редактировать файл с паролями пользователей (/etc/passwd). Установив переменную окружения EDITOR в значение своего любимого текстового редактора, вы можете указать vipw использовать его, а не редактор по умолчанию.

    Переменную в bash-е можно определить следующим способом:

    Эта команда создает переменную с именем «myvar» которая содержит строку «Это моя переменная окружения!». Следует заметить что: Во-первых, рядом со знаком «=» не должно быть пробелов; (попробуйте и вы увидите, что на команду с пробелами интерпретатор выдает ошибку). Во-вторых, если значение нашей переменной содержит пробелы или знаки табуляции, нужно заключить его в кавычки.

    Замечание: За подробной информацией об использовании кавычек в bash обратитесь к разделу «QUOTING» на странице man bash. Существование специальных последовательностей символов, которые интерпретатор заменяет другими значениями, делает объяснение работы со строками в bash слишком сложным. Поэтому мы расскажем только о наиболее часто используемых способах применения кавычек.

    В-третьих, обычно можно использовать двойные кавычки вместо одинарных, но именно в этом примере использование двойных кавычек вызовет ошибку интерпретатора, так как значение нашей переменной содержит один из тех специальных символов (о которых сказано в замечании выше) — «!«, но внутри одинарных кавычек никакие специальные символы не работают. Символ «!» в bash отвечает за так называемую «HISTORY EXPANSION» — работу с файлом истории командной строки (подробности см. в мануале). На смотря на то, что функция работы с историей команд при помощи «!» бывает очень полезной, именно сейчас мы хотим видеть его просто как восклицательный знак.

    Давайте посмотрим как можно прочитать значение нашей переменной:

    Ставя перед именем переменной знак $, мы сообщаем интерпретатору, что нужно заменить ее значением. Это называется подстановкой переменной (variable substitution/expansion).

    Нужно заметить, что имена переменных в bash чувствительны к регистру. Например, myvar и Myvar — это имена разных переменных.

    Но что будет, если мы попробуем сделать так:

    Мы хотели вывести на экран надпись ‘fooЭто моя переменная окружения!bar‘, но ничего не получилось. Что же произошло? Интерпретатор не смог определить значение какой именно переменной нужно подставить ($m, $my, $myvar, $myvarbar и т.д.) В таких неоднозначных случаях можно явно указать bash на имя переменной:

    Как вы видите, заключив имя нужной переменной в фигурные скобки, мы явно указали интерпретатору где находится переменная, а где простой текст. Выражение $myvar быстрее напечатать и оно работает в большинстве случаев, но ${myvar} будет работать всегда корректно. Оба этих выражения указывают на одну переменную, но вы должны использовать второе (с фигурными скобками), если имя переменной не отделено от окружающего текста пробелами или знаками табуляции.

    Вернемся к упомянутой нами возможности экспортировать переменные. Экспортированная переменная автоматически становится доступна для любого скрипта или программы, запущенной после экспортирования. Shell-скрипт может прочитать значение переменной при помощи встроенных в shell средств работы с переменными окружения, а программы на C — используя функцию getenv(). Вот небольшой пример кода на языке C, который вы можете напечатать и скомпилировать. Он поможет взглянуть на переменные окружения со стороны языка C:

    Сохраните этот код в файл myenv.c, а затем скомпилируйте:

    После этого в ващей рабочей директории появится исполняемый файл ‘myenv‘. Запустите его, и он выведет вам значение переменной ‘EDITOR‘ (если оно присвоено). Вот что получилось у меня:

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

    Так тоже не работает. Мы ожидали что программа напечатает «mousepad», но результат не изменился. Это произошло потому что мы забыли экспортировать переменную ‘EDITOR‘. В этот раз должно сработать:

    Итак, мы на примере убедились, что сторонний процесс (в нашем случае программа на C) не может получить доступ к переменной окружения до тех пор пока она не экспортирована. Кроме того, вы можете определить переменную и экспортировать ее одной командой:

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

    Как распарсить строку?

    Распарсить строку — значит разделить ее на более короткие составляющие. Это одна из частых операций, встречающихся при написании shell-скриптов. Иногда скрипту нужно определить имя конкретного файла или директории, зная полный (абсолютный) путь к нему. На bash это можно сделать всего одной командой:

    basename‘ — очень удобная утилита для расщепления строк на составляющие. Вторая команда — ‘dirname‘ — возвращает другую часть строки (путь к директории где находится файл):

    Замечание: команды ‘basename‘ и ‘dirname‘ не определяют наличие файла или директории в файловой системе, а работают только со строками.

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

    Очень полезно знать как присвоить переменной результат выполнения какой-либо команды. Сделать это довольно просто:

    То что мы сделали называется подстановка команд. В первой строке примера мы просто заключили команду в конструкцию $( ).

    Заметим, что тоже самое можно сделать применив вместо конструкции $( ) обратные кавычки « (клавиша клавиатуры сразу над клавишей Tab):

    В баше, как мы видим, можно сделать одно действие несколькими разными способами.

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

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

    Расщепление строк для профессионалов

    basename‘ и ‘dirname‘ замечательные утилиты, но бывают случаи, когда нужно произвести более сложные операции над строками чем манипуляции с путями. Для более эффективной работы со строками можно использовать встроенные средства подстановки значений переменных bash. Ранее мы уже использовали подстановку переменных, которая выглядела так: ${myvar}. Но в bash есть и встроенные средства манипуляции со строками. Посмотрим на следующий пример:

    Что же означает конструкция ${MYVAR##*fo} из предыдущего примера? Мы написали внутри ${ } имя переменной, затем два знака хэша (или диеза, кому как привычней) и шаблон («*fo»). Bash взял нашу переменную ‘MYVAR’, нашел наибольшую по длине подстроку строки ‘foodforthought.jpg’ (начиная от начала строки) которая совпала с шаблоном «*fo» и удалил ее. С первого раза в этих тонкостях сложно разобраться. Для того чтобы понять как работает конструкция ##, давайте рассмотрим пошагово как bash ищет совпадение подстроки с шаблоном. Начинаем поиск подстроки совпадающей с шаблоном «*fo» с начала строки «foodforthought.jpg». Вот список всех таких подстрок:

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

    Вторая форма подстановки переменной показанная в примере отличается от первой только наличием одного знака хэша (#), а не двух. И bash выполняет те же действия, за исключением того, что удаляет не самую длинную а самую короткую из совпавших с шаблоном подстрок. Как видно, после удаления самой короткой подстроки совпавшей с шаблоном (fo) у нас остается строка «odforthought.jpg».

    Это может показаться очень запутанным, поэтому я покажу как можно быстро запомнить эту фичу bash. Когда мы ищем самое длинное совпадение, то используем два хэша (##), т.к. «##» длиннее чем «#». А когда ищем самое короткое совпадение, используем #. Видите, не так уж и сложно! Постойте, а как же запомнить, что поиск начинается от начала строки? Очень просто! Заметим, что в английской раскладке клавиатуры сочетание Shift–4 дает нам знак $ используемый в bash для подстановки значения переменной. Сразу перед знаком $ на клавиатуре находится # (как бы вначале) и таким образом «#» удаляет символы от начала строки. Вы захотите узнать, как удалить последовательность символов от конца строки. Как можно догадаться, это делается при помощи знака (%), находящегося на клавиатуре сразу после «$». Вот небольшой пример удаления окончания строки:

    Как вы видите, одинарный и двойной знаки процента (% и %%) работают также как «#» и «##», но удаляют подстроку совпавшую с шаблоном от конца строки. Запомните, что можно не использовать знак «*», если вы хотите удалить какое-то конкретное окончание строки.

    В этом примере нет разницы использовать % или %%, т.к. есть только одно совпадение. И не забывайте при выборе «#» или «%» смотреть на 3,4 и 5 клавиши клавиатуры.

    Мы можем использовать еще одну форму подстановки значения переменной для выделения подстроки по заданной длине и позиции начала:

    Эта форма очень удобна. Просто укажите разделяя двоеточиями позицию начала подстроки — первое число и длину подстроки — второе число.

    Применение расщепления строк

    Разделению строк научились, давайте теперь напишем небольшой shell-скрипт. Наш скрипт будет принимать один аргумент — имя файла и если этот файл имеет расширение .tar, скрипт будет сообщать что это тарбол. (На самом деле определять тип файла по расширению не совсем корректно.

    Для этих целей существует команда file. Пример только для демонстрации.) Вот этот скрипт:

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

    Ее синтаксис, как видно из примера — «#!<путь к интерпретатору>».

    Сохраните текст скрипта из примера в файл mytar.sh, затем измените права доступа к нему ‘chmod 755 mytar.sh‘ (это сделает файл исполняемым). И, наконец, запустите скрипт с аргументом в виде имени файла, как показано в следующем примере:

    Хорошо, вроде работает, но не очень функционален. Перед тем как усовершенствовать наш скрипт, рассмотрим конструкцию if, использованную в нем. В квадратных скобках сравниваются две строки («=» — это оператор сравнения в bash). Результат сравнения — булевое выражение ‘false’ или ‘true’ (правда или ложь). Но давайте посмотрим какие именно строки сравниваются. Справа все понятно — строка «tar». Слева стоит разобранное нами выше выражение, удаляющее начало строки в переменной $1 по шаблону «*.» (вся строка до последней точки, т.к. используются два хэша ##). После этой операции подстановки остается только часть строки после последней точки — расширение другими словами. Если в переменной $1 содержится имя файла с расширением «tar», то результатом сравнения строк будет булевое true.

    Вам наверное интересно, почему при проверке условия мы использовали переменную «$1». Все очень просто: переменная $1 содержит в себе первый аргумент переданный скрипту ($2 — второй аргумент и так далее). С этой функцией разобрались, рассмотрим теперь подробнее конструкцию условного выбора «if«.

    Конструкция if

    Как и во многих языках программирования, в bash есть условные конструкции.

    Оболочка Bash — шпаргалка для начинающих

    Они имеют формат, описанный ниже. Будьте внимательны: слова «if» и «then» должны находится на разных строках. Старайтесь выравнивать горизонтально всю конструкцию, включая заключительный «fi» и все «else». Это делает код намного удобнее для чтения и отладки. В дополнении к простой форме «if,else» есть еще несколько других форм условных конструкций:

    В приведенном выше примере ‘действие’ выполняется только если ‘условие’ верно, в противном случае скрипт продолжает выполнение инструкций со строки идущей за «fi».

    А эта конструкция последовательно проверяет условия и если они верны, то исполняет соответствующее действие. Если ни одно из условий не верно, то выполняется ‘действие_x’ стоящее после ‘else’ (если оно есть). Потом продолжается исполнение команд идущих за этой конструкцией «if,then,else», если таковые есть.

    В следующей части

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

    Смотри также


    Оригинал статьи— Bash by example, Part 1 (eng)

    FILED UNDER : IT

    Submit a Comment

    Must be required * marked fields.

    :*
    :*