- Аргументы командной строки Bash
- Параметры скрипта Bash
- Получение названия скрипта Bash
- Проверка параметров скрипта
- Обработка неизветсного числа параметров
- Обработка опций в Bash
- Выводы
- Аргументы командной строки в shell-скриптах
- Что такое аргумент командной строки?
- Как сценарии оболочки понимают аргументы командной строки?
- Чтение аргументов командной строки в shell-скриптах
- Подводим итоги
Аргументы командной строки Bash
Функциональность интерпретатора Bash позволяет работать не только со статистическими данными, записанными в скриптах. Иногда возникает необходимость добавить сценарию интерактивности, позволяя принимать внешние параметры скрипта для манипуляции ими в коде.
В этой статье будет рассмотрено, как принимать аргументы командной строки bash, способы его обработки, проверка опций, а также известные особенности при работе с ними.
Параметры скрипта Bash
Интерпретатор Bash присваивает специальным переменным все параметры, введённые в командной строке. В их состав включено название сценария, выполняемого интерпретатором. Такие переменные называются ещё числовыми переменными, так как в их названии содержится число:
Ниже приведён пример использования одного параметра скрипта Bash:
#!/bin/bash
factorial=1
for (( number = 1; number do
factorial=$[ $factorial * $number ]
done
echo «Факториал числа $1 равен $factorial»
Переменная $1 может использоваться в коде точно так же, как и любая другая. Скрипт автоматически присваивает ей значение из параметра командой строки — пользователю не нужно делать это вручную.
Если необходимо ввести дополнительные параметры, их следует разделить в командной строке пробелами.
#!/bin/bash
total=$[ $1 * $2 ]
echo «Первый параметр равен $1.»
echo «Второй параметр равен $2.»
echo «Произведение параметров равно $total.»
Командный интерпретатор присвоил числа 5 и 10 соответствующим переменным — $1 и $2.
Также параметрами могут быть и текстовые строки. Однако, если есть необходимость передать параметр, содержащий пробел (например имя и фамилию), его нужно заключить в одинарные или двойные кавычки, так как по умолчанию пробел служит разделителем параметров командной строки:
#!/bin/bash
echo «Добро пожаловать, $1»
На заметку: кавычки, которые используются при передаче параметров, обозначают начало и конец данных и не являются их частью.
Если необходимо использовать больше 9 параметров для скрипта, то названия переменных немного изменятся. Начиная с десятой переменной, число, стоящее после знака $, необходимо заключать в квадратные скобки (без внутренних пробелов):
#!/bin/bash
total=$[ $ * $ ]
echo «Десятый параметр равен $»
echo «Одиннадцатый параметр равен $»
echo «Произведение этих параметров равно $total»
Получение названия скрипта Bash
Как уже упоминалось, имя сценария является самым первым параметром скрипта. Чтобы определить название программы, используется переменная $0. Такая необходимость возникает, например, при написании скрипта, который может выполнять несколько функций. Однако при этом возникает одна особенность, которую нужно учитывать на практике:
#!/bin/bash
echo «Имя сценария: $0»
Как видно, если строкой, фактически переданной в переменную $0, является весь путь к сценарию, то на вывод будет идти весь путь, а не только название программы.
Если нужен скрипт, выполняющий различные функции с учётом того, под каким именем он был вызван из командной строки, придётся проделать дополнительную работу: удалить сведения о пути, который использовался для его вызова.
Для этого специально предусмотрена небольшая команда. Команда basename возвращает только название скрипта без абсолютного или относительного пути к нему:
#!/bin/bash
name=`basename $0`
echo «Имя запущенной программы: $name»
Проверка параметров скрипта
Передача параметров Bash вынуждает соблюдать осторожность. Если сценарий написан с применением параметров, но запускается без них, то возникнут проблемы в работе программы.
Если попробовать запустить написанный ранее скрипт test2 без аргументов, то перед выводом команд echo будет отображена ошибка:
Чтобы предотвращать подобные ситуации, необходимо действовать на упреждение — проверять аргументы скрипта на наличие значений. Это настоятельная рекомендация при использовании параметров в командной строке, и только после ревизии стоит пускать их в дело:
#!/bin/bash
if [ -n «$1» ]
then
echo «Добро пожаловать, $1»
else
echo «Простите, вы не представились»
fi
В данном случае использовалась опция -n из предыдущей статьи о сравнении строк в Bash для проверки на наличие значения в переменной, которая считала параметр.
Обработка неизветсного числа параметров
Для начала рассмотрим один из часто используемых инструментов при работе с параметрами Bash — команду shift. Её прямое назначение заключается в сдвиге параметров на одну позицию влево. Таким образом, значение из переменной $3 переместится в $2, а из $2 — в $1. Но из $1 значение просто отбросится и не сместится в $0, так как там неизменно хранится название запущенной программы.
Эта команда является эффективным способом обработки всех параметров, переданных сценарию, особенно, когда нельзя заранее узнать их количество. Достаточно лишь обработать $1, сделать сдвиг и повторить процедуру.
#!/bin/bash
count=1
while [ -n «$1» ]
do
echo «Параметр №$count = $1»
count=$[ $count + 1 ]
shift
done
Этот скрипт выполняет цикл while, в условии которого указана проверка первого параметра на длину. И если она равна нулю, цикл прерывает свою работу. При положительном результате проверки команда shift сдвигает все параметры влево на одну позицию.
Ещё один вариант использование shift — смещать на несколько позиций. Для этого достаточно через пробел указать количество, на которое будет смещён ряд параметров скрипта.
#!/bin/bash
echo «Первый параметр из переданных: $1»
shift 2
echo «Теперь первый параметр: $1»
На заметку: при использовании shift нужно быть осторожным, ведь сдвинутые за пределы $1 параметры не восстанавливаются в период работы программы.
Обработка опций в Bash
Помимо параметров скрипт может принимать опции — значения, состоящие из одной буквы, перед которыми пишется дефис. Рассмотрим 3 метода работы с ними в скриптах. Сперва кажется, что при работе с опциями не должно возникать каких-либо сложностей. Они должны быть заданы после имени запускаемой программы, как и параметры. При необходимости можно сделать обработку опций командной строки по такому же принципу, как это делается с параметрами.
По примеру выше можно применять shift для обработки простых опций. С помощью инструкции case можно определять, являются ли аргументы Bash опциями:
#!/bin/bash
while [ -n «$1» ]
do
case «$1» in
-a | -b | -c) echo «Найдена опция $1» ;;
*) echo «$1 не опция» ;;
esac
shift
done
Блок case работает правильно вне зависимости от того, как расположены аргументы командной строки bash.
Выводы
Для того, чтобы сделать свою программу более интерактивной, можно использовать параметры Bash. Встроенные переменные, в названиях которых фигурирует число, обозначают порядок указанных для программы параметров.
Команда basename используется для обрезания пути запущенного сценария, что часто необходимо для создания гибких программ. Использование команды shift позволяет эффективно проходить по переданным скрипту параметрам, особенно когда их количество неизвестно.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Аргументы командной строки в shell-скриптах
В сегодняшней статье мы разберем чтение аргументов командной строки в сценариях оболочки. Shell-скрипты — инструмент, необходимый любому пользователю Linux. Они играют важную роль в автоматизации повседневных задач и создании собственных команд и макросов.
Сценарии оболочки могут получать ввод от пользователя в виде аргументов.
Когда мы передаем shell-скрипту аргументы, мы можем с их помощью задавать локальную последовательность выполнения задач. Эти аргументы можно применять для получения выходных данных и даже изменять вывод как переменные в сценариях оболочки.
Что такое аргумент командной строки?
Аргументы командной строки — это параметры, которые передаются скрипту во время его выполнения в оболочке bash.
В Linux они также известны как позиционные параметры.
Аргументы командной строки используются для обозначения позиции в памяти, где хранится команда и связанные с ней параметры. Понимание аргументов очень важно для тех, кто изучает сценарии командной строки.
В этой статье мы рассмотрим само понятие аргументов командной строки, а также их использование в shell-скриптах.
Как сценарии оболочки понимают аргументы командной строки?
Аргументы командной строки позволяют делать сценарии оболочки интерактивными для пользователей. Кроме того, они помогают скрипту определить данные, с которыми ему нужно работать. Таким образом, аргументы являются неотъемлемой частью любого практического использования shell-скриптов.
В оболочке bash есть специальные переменные, зарезервированные для указания на аргументы, которые мы передаем через shell-скрипт. Bash сохраняет эти переменные в числовом виде ($1, $2, $3, … $n).
Первый аргумент командной строки в shell-скрипте — $1, второй — $2, третий — $3. И так продолжается до 9-го аргумента. В переменной $0 хранится название скрипта или самой команды.
Также существуют специальные символы, которые являются позиционными параметрами, но их функция тесно связана с аргументами командной строки.
Специальный символ $# хранит общее количество аргументов. Подстановочные символы $@ и $* указывают на все аргументы. $$ используется для поиска идентификатора процесса текущего скрипта оболочки, а $? можно использовать для вывода кода завершения сценария.
Чтение аргументов командной строки в shell-скриптах
Теперь вы имеете представление об аргументах командной строки в Linux. Теперь пришло время использовать эти знания на практике.
В этом туториале применение аргументов командной строки в shell-скрипте мы рассмотрим на примере команды netstat.
Сначала давайте напишем простой сценарий оболочки, чтобы показать работу всех зарезервированных переменных, которые обсуждались ранее. Используйте nano или любой другой редактор для создания файла и скопируйте в него следующий код. Для примера мы планируем использовать вот такой скрипт:
#!/bin/sh echo "Script Name: $0" echo "First Parameter of the script is $1" echo "The second Parameter is $2" echo "The complete list of arguments is $@" echo "Total Number of Parameters: $#" echo "The process ID is $$" echo "Exit code for the script: $?"
После завершения работы сохраним скрипт под названием PositionalParameters.sh и выйдем из текстового редактора.
Теперь давайте откроем командную строку и запустим сценарий оболочки со следующими аргументами.
./PositionalParameters.sh learning command line arguments
Сценарий запустится с указанными аргументами и будет использовать позиционные параметры для вывода данных. Если вы правильно все выполнили, вы увидите следующее:
Вывод показывает ожидаемый результат, заменяя зарезервированные переменные соответствующим аргументом.
Процесс был запущен под идентификатором 14974 и завершен с кодом 0.
Подводим итоги
Читать аргументы командной строки в shell-скриптах — важный навык, поскольку он позволяет нам создавать сценарии, которые могут принимать входные данные от пользователя и логическим путем генерировать выход.
С помощью аргументов в скриптах вы можете значительно упростить повторяющиеся задачи, с которыми вам приходится сталкиваться ежедневно, а также создавать собственные команды, экономя при этом время и силы.