Сценарий Bash — как использовать аргументы командной строки
В этой статье мы рассмотрим использование аргументов командной строки в сценарии Bash. Аргументы — это входные данные, необходимые для обработки потока. Вместо того, чтобы получать входные данные из программы оболочки или назначать их программе, аргументы передаются в исполнительной части.
Позиционные параметры
Аргументы командной строки передаются позиционно, т.е. так же, как они передаются при выполнении программы. Давайте посмотрим на примере.
Создайте программу-оболочку, которая может отображать аргументы командной строки в позиционном порядке. Редактор Nano используется для создания программы-оболочки.
Программу можно запустить с помощью команды «sh».
sh <script filename> arg1 arg2 arg3 ......
Итак, наш код исполнения станет
sh displayPositionalArgument.sh Welcome To GeeksForGeeks
Схематическое представление приведенного выше кода:
Всегда первый аргумент начинается после <имя файла сценария>. <имя файла сценария> будет в 0-м месте. Нам нужно взять позиционные аргументы после <имя файла сценария>. Следовательно, в приведенном выше примере
$1-> "Welcome" $2-> "To" $3-> "GeeksForFeeks"
Примечание . Мы можем передать n аргументов, и они идентифицируются по их положению.
Вывод приведенного выше кода:
Некоторые специальные переменные также следует учитывать при обработке аргументов командной строки.
| Специальная переменная | Детали специальной переменной |
|---|---|
| $1 … $n | Позиционный аргумент, указывающий от 1 .. n. Если аргумент похож на 10, 11 и далее, он должен быть указан как ${10},${11 |
| $0 | Это не учитывается в списке аргументов, так как указывает «имя» программы-оболочки. В приведенном выше примере $0 — это «displayPositionalArgument.sh». |
| $@ | Значения аргументов, которые передаются в программе. Это будет очень полезно, если мы не уверены в количестве переданных аргументов. |
| $# | Общее количество аргументов, и это хороший подход для концепций цикла. |
| $* | Чтобы получить все аргументы в двойных кавычках, мы можем следовать этому пути |
| $$ | Чтобы узнать об идентификаторе процесса текущей оболочки |
| $? и $! | Идентификатор состояния выхода и идентификатор процесса последней команды |
Использование флагов
Аргументы можно передавать вместе с флагами. Аргументы можно обозначить одной буквой, имеющей - перед этим. Одна буква может иметь значение, и здесь возьмем -1, -2 и -3.
Нам нужно использовать функцию getopts для чтения флагов на входе, а OPTARG ссылается на соответствующие значения:
Вышеупомянутая программа может быть выполнена как
sh usingFlags.sh -1 ‘GeeksForGeeks’ -2 ‘JavaProgramming’ -3 100
Выход
Использование циклов с $@ — циклические конструкции
Хотя позиционные параметры помогают отправлять в качестве аргументов командной строки, если аргументов больше, мы не можем их посчитать и использовать. Вместо этого, используя $@, мы можем добиться этого. Это не что иное, как массив всех переданных параметров. Перебирая цикл for, мы можем получить это.
Выход :

Другой способ — использовать оператор Shift вместо $@ — оператор Shift:
Переменная $# используется для возврата размера ввода. Используя это и оператор сдвига, мы можем добиться вместо $@
Выход:

Общий сценарий использования с использованием оператора Shift:
Предположим, что в аргументах команды мы можем передать аргумент «-d», который не что иное, как знать, что это каталог.
- Если указано -d, то нам нужно выбрать следующий аргумент и проверить, является ли он таким каталогом.
- Если нет -d, то проверяем файл это или нет
Затем отобразите соответственно, является ли аргумент каталогом или файлом
Пусть скрипт будет называться «shiftArgument.sh».
sh shiftArgument.sh -d /home shiftArgument.sh
Выход:
Приведенный выше код будет проверять «/home» как каталог, поскольку у нас есть «-d» в качестве первого позиционного аргумента, и, следовательно, выполняется оператор сдвига, а следующий аргумент проверяется, чтобы увидеть, является ли он каталогом. Если нет аргумента «-d» в качестве предыдущего, он просто проверяет «является ли этот аргумент файлом или нет».
Вывод
Мы можем передавать аргументы командной строки по своему усмотрению позиционно или с помощью флагов. Кроме того, доступны такие полезные понятия, как $@ (массив всех параметров), $# (путем вычисления размера ввода), и с этим мы можем выполнять итерации в циклах «for» или «пока», мы можем получить доступ к аргументам.