linux передача параметров в скрипт

Аргументы командной строки Bash

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

В этой статье будет рассмотрено, как принимать аргументы командной строки bash, способы его обработки, проверка опций, а также известные особенности при работе с ними.

Параметры скрипта Bash

Интерпретатор Bash присваивает специальным переменным все параметры, введённые в командной строке. В их состав включено название сценария, выполняемого интерпретатором. Такие переменные называются ещё числовыми переменными, так как в их названии содержится число:

Ниже приведён пример использования одного параметра скрипта Bash:

#!/bin/bash
factorial=1
for (( number = 1; number

Результат работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Переменная $1 может использоваться в коде точно так же, как и любая другая. Скрипт автоматически присваивает ей значение из параметра командой строки — пользователю не нужно делать это вручную.

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

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Командный интерпретатор присвоил числа 5 и 10 соответствующим переменным — $1 и $2.

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

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Если необходимо использовать больше 9 параметров для скрипта, то названия переменных немного изменятся. Начиная с десятой переменной, число, стоящее после знака $, необходимо заключать в квадратные скобки (без внутренних пробелов):

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Получение названия скрипта Bash

Как уже упоминалось, имя сценария является самым первым параметром скрипта. Чтобы определить название программы, используется переменная $0. Такая необходимость возникает, например, при написании скрипта, который может выполнять несколько функций. Однако при этом возникает одна особенность, которую нужно учитывать на практике:

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

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

Для этого специально предусмотрена небольшая команда. Команда basename возвращает только название скрипта без абсолютного или относительного пути к нему:

Результат работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Проверка параметров скрипта

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

Если попробовать запустить написанный ранее скрипт test2 без аргументов, то перед выводом команд echo будет отображена ошибка:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

В данном случае использовалась опция -n из предыдущей статьи о сравнении строк в Bash для проверки на наличие значения в переменной, которая считала параметр.

Обработка неизветсного числа параметров

Для начала рассмотрим один из часто используемых инструментов при работе с параметрами Bash — команду shift. Её прямое назначение заключается в сдвиге параметров на одну позицию влево. Таким образом, значение из переменной $3 переместится в $2, а из $2 — в $1. Но из $1 значение просто отбросится и не сместится в $0, так как там неизменно хранится название запущенной программы.

Эта команда является эффективным способом обработки всех параметров, переданных сценарию, особенно, когда нельзя заранее узнать их количество. Достаточно лишь обработать $1, сделать сдвиг и повторить процедуру.

Пример работы кода:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Этот скрипт выполняет цикл while, в условии которого указана проверка первого параметра на длину. И если она равна нулю, цикл прерывает свою работу. При положительном результате проверки команда shift сдвигает все параметры влево на одну позицию.

Ещё один вариант использование shift — смещать на несколько позиций. Для этого достаточно через пробел указать количество, на которое будет смещён ряд параметров скрипта.

Пример работы скрипта:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

На заметку: при использовании shift нужно быть осторожным, ведь сдвинутые за пределы $1 параметры не восстанавливаются в период работы программы.

Обработка опций в Bash

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

По примеру выше можно применять shift для обработки простых опций. С помощью инструкции case можно определять, являются ли аргументы Bash опциями:

Пример работы программы:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Блок case работает правильно вне зависимости от того, как расположены аргументы командной строки bash.

Выводы

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

Команда basename используется для обрезания пути запущенного сценария, что часто необходимо для создания гибких программ. Использование команды shift позволяет эффективно проходить по переданным скрипту параметрам, особенно когда их количество неизвестно.

Источник

Основы BASH. Часть 1

Введение

break выход из цикла for, while или until
continue выполнение следующей итерации цикла for, while или until
echo вывод аргументов, разделенных пробелами, на стандартное устройство вывода
exit выход из оболочки
export отмечает аргументы как переменные для передачи в дочерние процессы в среде
hash запоминает полные имена путей команд, указанных в качестве аргументов, чтобы не искать их при следующем обращении
kill посылает сигнал завершения процессу
pwd выводит текущий рабочий каталог
read читает строку из ввода оболочки и использует ее для присвоения значений указанным переменным.\
return заставляет функцию оболочки выйти с указанным значением
shift перемещает позиционные параметры налево
test вычисляет условное выражение
times выводит имя пользователя и системное время, использованное оболочкой и ее потомками
trap указывает команды, которые должны выполняться при получении оболочкой сигнала
unset вызывает уничтожение переменных оболочки
wait ждет выхода из дочернего процесса и сообщает выходное состояние.

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

Что необходимо знать с самого начала

1. Любой bash-скрипт должен начинаться со строки:

#!/bin/bash
в этой строке после #! указывается путь к bash-интерпретатору, поэтому если он у вас установлен в другом месте(где, вы можете узнать набрав whereis bash) поменяйте её на ваш путь.
2. Коментарии начинаются с символа # (кроме первой строки).
3. В bash переменные не имеют типа(о них речь пойдет ниже)

Переменные и параметры скрипта

Приведу как пример небольшой пример, который мы разберем:

Результат выполнения скрипта:

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

Условия

Условные операторы, думаю, знакомы практически каждому, кто хоть раз пытался на чем-то писать программы. В bash условия пишутся след. образом (как обычно на примере):
#!/bin/bash
source=$1 #в переменную source засовываем первый параметр скрипта
dest=$2 #в переменную dest засовываем второй параметр скрипта

Условия. Множественный выбор

esac #окончание оператора case.

Результат работы:
ite@ite-desktop:

UPD: Исправил некоторые ошибки
UPD: Обновил часть про условия if-then-else

Источник

Как передать переменные (параметры) из одного BASH-скрипта другому скрипту

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

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

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

Таким образом, мы передали 4 параметра скрипту. Посмотрим, как работает передача парамтров в BASH и как работать с переданными (полученными) параметрами.

Чтение параметров командной строки в BASH-скрипте

При запуске BASH-скрипта с параметрами, эти параметры помещаются в специальные переменные, которые также называют позиционными параметрами:

Посмотрим на примере, написав простой скрипт:

Результатом его работы будут следующие данные:

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

То получим её значение, которое попадёт во второй позиционный параметр:

Важное замечание:
Передаваемые значения не должны иметь пробелов, так как пробелы используются в качестве разделителя передаваемых BASH-скрипту переменных!

Для того, чтобы передать значение в переменной с пробелами, её нужно заключить между двумя двойными кавычками. В нашем примере так «$number»

Проверка параметров, передаваемых BASH-скрипту

Для того, чтобы передаваемые данные соответствовали ожидаемым, хорошо бы их до начала обработки проверить. Пожалуй, самым важным вопросом проверки является проверка вообще на формальное наличие (пользователь может просто ничего не ввести). Усложним немного наш скрипт и вставим в него проверку наличия данных, передаваемых BASH-скрипту:

Подсчёт количества параметров, передаваемых BASH-скрипту

Ну и получим ожидаемый результат:

Как узнать значение последнего параметра, передаваемого BASH-скрипту

Результатом выполнения будет следующее:

Резюме

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

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

Источник

Bash-скрипты: параметры и ключи командной строки

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

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

В данном примере сценарию передано два параметра — «10» и «20». Всё это хорошо, но как прочесть данные в скрипте?

Чтение параметров командной строки

Оболочка bash назначает специальным переменным, называемым позиционными параметрами, введённые при вызове скрипта параметры командной строки:

Вот как можно использовать параметры командной строки в скрипте с помощью этих переменных:

Запустим сценарий с параметрами:

Вот что он выведет в консоль.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Вывод параметров, с которыми запущен скрипт

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

Взглянем на ещё один пример использования параметров. Тут мы найдём сумму чисел, переданных сценарию:

Запустим скрипт и проверим результат вычислений.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Сценарий, который находит сумму переданных ему чисел

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

Он выведет то, что мы от него ожидаем.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Сценарий, работающий со строковым параметром

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

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

Проверка параметров

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

Вызовем скрипт сначала с параметром, а потом без параметров.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Подсчёт параметров

В результате скрипт сообщит о том, что ему передано 5 параметров.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Подсчёт количества параметров в скрипте

Эта переменная даёт необычный способ получения последнего из переданных скрипту параметров, не требующий знания их количества. Вот как это выглядит:

Вызовем скрипт и посмотрим, что он выведет.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Обращение к последнему параметру

Захват всех параметров командной строки

Рассмотрим разницу между этими переменными на примерах. Сначала взглянем на их содержимое:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

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

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Команда shift

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

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Использование команды shift для перебора параметров

Ключи командной строки

Ключи командной строки обычно выглядят как буквы, перед которыми ставится тире. Они служат для управления сценариями. Рассмотрим такой пример:

И проанализируем то, что он выведет в терминал.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Обработка ключей в скрипте

Как различать ключи и параметры

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

Эта последовательность — двойное тире (—). Оболочка использует её для указания позиции, на которой заканчивается список ключей. После того, как скрипт обнаружит признак окончания ключей, то, что осталось, можно, не опасаясь ошибок, обрабатывать как параметры, а не как ключи. Рассмотрим пример:

Этот сценарий использует команду break для прерывания цикла while при обнаружении в строке двойного тире.

Вот что получится после его вызова.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Обработка ключей и параметров командной строки

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

Обработка ключей со значениями

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

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

Вызовем этот скрипт в таком виде:

Посмотрим на результаты его работы.

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Обработка параметров ключей

Использование стандартных ключей

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

— a Вывести все объекты.
— c Произвести подсчёт.
— d Указать директорию.
— e Развернуть объект.
— f Указать файл, из которого нужно прочитать данные.
— h Вывести справку по команде.
— i Игнорировать регистр символов.
— l Выполнить полноформатный вывод данных.
— n Использовать неинтерактивный (пакетный) режим.
— o Позволяет указать файл, в который нужно перенаправить вывод.
— q Выполнить скрипт в quiet-режиме.
— r Обрабатывать папки и файлы рекурсивно.
— s Выполнить скрипт в silent-режиме.
— v Выполнить многословный вывод.
— x Исключить объект.
— y Ответить «yes» на все вопросы.

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

Получение данных от пользователя

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

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

Источник

Написание скриптов на Bash

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

Основы скриптов

Простейший пример скрипта для командной оболочки Bash:

!/bin/bash
echo «Hello world»

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Утилита echo выводит строку, переданную ей в параметре на экран. Первая строка особая, она задает программу, которая будет выполнять команды. Вообще говоря, мы можем создать скрипт на любом другом языке программирования и указать нужный интерпретатор, например, на python:

!/usr/bin/env python
print(«Hello world»)

!/usr/bin/env php
echo «Hello world»;

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

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

chmod ugo+x файл_скрипта

Теперь выполняем нашу небольшую первую программу:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Все работает. Вы уже знаете как написать маленький скрипт, скажем для обновления. Как видите, скрипты содержат те же команды, что и выполняются в терминале, их писать очень просто. Но теперь мы немного усложним задачу. Поскольку скрипт, это программа, ему нужно самому принимать некоторые решения, хранить результаты выполнения команд и выполнять циклы. Все это позволяет делать оболочка Bash. Правда, тут все намного сложнее. Начнем с простого.

Переменные в скриптах

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

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

Например, объявим переменную string:

Модифицируем наш скрипт:

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

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Переменные и вывод команд

Переменные не были бы настолько полезны, если бы в них невозможно было записать результат выполнения утилит. Для этого используется такой синтаксис:

$( команда )

С помощью этой конструкции вывод команды будет перенаправлен прямо туда, откуда она была вызвана, а не на экран. Например, утилита date возвращает текущую дату. Эти команды эквивалентны:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Понимаете? Напишем скрипт, где будет выводиться hello world и дата:

string1=»hello world »
string2=$(date)

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Параметры скрипта

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

Переменная с именем 1 содержит значение первого параметра, переменная 2, второго и так далее. Этот bash скрипт выведет значение первого параметра:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Управляющие конструкции в скриптах

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

В Bash для проверки условий есть команда Синтаксис ее такой:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

if команда_условие
then
команда
else
команда
fi

Эта команда проверяет код завершения команды условия, и если 0 (успех) то выполняет команду или несколько команд после слова then, если код завершения 1 выполняется блок else, fi означает завершение блока команд.

Но поскольку нам чаще всего нас интересует не код возврата команды, а сравнение строк и чисел, то была введена команда [[, которая позволяет выполнять различные сравнения и выдавать код возврата зависящий от результата сравнения. Ее синтаксис:

[[ параметр1 оператор параметр2 ]]

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

Теперь объединением все это и получим скрипт с условным выражением:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Циклы в скриптах

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

Первым рассмотрим цикл for. Вот его синтаксис:

for переменная in список
do
команда
done

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

Например, переберем пять цифр:

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

while команда условие
do
команда
done

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

linux передача параметров в скрипт. Смотреть фото linux передача параметров в скрипт. Смотреть картинку linux передача параметров в скрипт. Картинка про linux передача параметров в скрипт. Фото linux передача параметров в скрипт

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

Хотелось бы отметить еще кое-что. Такие конструкции, как while, for, if рассчитаны на запись в несколько строк, и если вы попытаетесь их записать в одну строку, то получите ошибку. Но тем не менее это возможно, для этого там, где должен быть перевод строки ставьте точку с запятой «;». Например, предыдущий цикл можно было выполнить в виде одной строки:

Все очень просто я пытался не усложнять статью дополнительными терминами и возможностями bash, только самое основное. В некоторых случаях, возможно, вам понадобиться сделать gui для bash скрипта, тогда вы можете использовать такие программы как zenity или kdialog, с помощью них очень удобно выводить сообщения пользователю и даже запрашивать у него информацию.

Выводы

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

Источник

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

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