Как обрабатывать аргументы командной строки в Bash?

Kak Obrabatyvat Argumenty Komandnoj Stroki V Bash



В Linux мы используем аргументы командной строки в качестве входных данных для сценария bash. Bash может последовательно принимать эти аргументы командной строки и анализировать их как опцию. Эти аргументы позволяют вам динамически влиять на действия и выходные данные скрипта.

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







Как обрабатывать аргументы командной строки в Bash?

Существуют различные способы обработки аргументов командной строки в Bash, поэтому давайте рассмотрим их, чтобы получить краткую информацию:



Функция getopt



Функция getopt удобна тем, что предоставляет параметры и синтаксис для определения и разбора аргументов в bash. Это встроенная функция Linux, которую вы можете использовать при создании файла базы данных или отчета в определенном формате на основе аргументов. Функция getopt помогает анализировать короткие аргументы командной строки, поскольку существует два типа аргументов:





  • Короткие аргументы: Это односимвольные аргументы, за которыми следует дефис. Например, -a, -l, -h и т. д. — это несколько примеров одиночных аргументов.

  • Длинные аргументы: Это многосимвольные аргументы, за которыми следует двойной дефис. Существуют различные примеры длинных аргументов, такие как –all, –list, –help и т. д.

Давайте возьмем пример, в котором мы будем обрабатывать аргументы командной строки с помощью утилиты getopt. Мы создали сценарий bash с именем «getopt.sh», который содержит следующую информацию:



!/ мусорное ведро / бить

пока получить 'А:Б:С:Д:' Детали; делать

кейс ' $детали ' в

А )

эхо 'Имя гражданина $OPTARG ' ;;

Б )

эхо «Удостоверение личности гражданина $OPTARG ' ;;

С )

эхо «Место рождения $OPTARG ' ;;

Д )

эхо «Профессия $OPTARG ' ;;

* )

выход 1 ;;

эсак

Выполнено

сдвиг ' $(($ОПТИНГ -1) )'



если [ ! 1 доллар ] ; тогда

эхо 'Семейное положение $1'

еще

эхо «Нет записей»

выход 1

быть



если [ ! 2 доллара ] ; тогда

эхо «Члены семьи 2 доллара»

быть

Теперь запустим скрипт с нужными аргументами на входе:

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

Использование флагов

Флаги — это не что иное, как одиночные символы, которым предшествует дефис (-). Когда мы передаем аргументы с помощью функции getopt, мы используем флаги. -a, -b, -c — некоторые примеры флагов. Например, для сценария требуется имя гражданина, его удостоверение личности, место, возраст и род занятий. Следовательно, мы использовали флаги j, k, l, m, n, чтобы одновременно определить имя гражданина, ID, место, возраст и род занятий:

#!/бин/баш

Пока получить j:k:l:m:n: flag_info

делать

кейс ' ${флаг_информация} ' в
< ол >
< что > Дж ) имя гражданина знак равно ${OPTARG} ;; что >
< что > к ) гражданин знак равно ${OPTARG} ;; что >
< что > л ) место знак равно ${OPTARG} ;; что >
< что > м ) возраст знак равно ${OPTARG} ;; что >
< что > н ) оккупация знак равно ${OPTARG} ;; что >
ол >
эсак

Выполнено

эхо 'Вот введенные данные:'

эхо «Имя гражданина: $citizenname ' ;

эхо 'Идентификатор гражданина: $citizenid ' ;

эхо 'Место: $место ' ;

эхо 'Возраст: $возраст ' ;

эхо 'Занятие: $оккупация ' ;

Скрипт выдаст в терминале следующий результат:

. /< сценарий > -j Дэнни 476 Торонто 25 Автор

С использованием [электронная почта защищена] С петлями

“ [электронная почта защищена] ” представляет собой не что иное, как массив всех входных аргументов. Мы можем передать любое количество входных данных, используя « [электронная почта защищена] ' переменная. Вы можете использовать эту переменную как цикл для перебора аргументов. “ [электронная почта защищена] тогда пригодится переменная »; вы не знаете размер входных данных и не можете принимать позиционные аргументы. Следовательно, вы можете использовать « [электронная почта защищена] », а не определять функцию getopt снова и снова. Вот пример использования циклов и [электронная почта защищена] вместе в сценарии:

#!/бин/баш

на одном знак равно ( “$ @ )



если [ $# -gt 1 ]

тогда



добавлять =$ ( ( ${число[0]} + ${число[1]} ) )

эхо «Сложение всех чисел равно: $ добавить '



вычитание =$ ( ( ${число[0]} - ${число[1]} - ${число[2]} ) )

эхо «Вычитание чисел это: $ вычитание '



умножить =$ ( ( ${число[0]} * ${число[1]} * ${число[2]} ) )

эхо «Умножение чисел это: $ умножить '



дивизион1 =$ ( ( ${число[0]} / ${число[1]} ) )

эхо «Отделение ${число[0]} а также ${число[1]} является: $дивизия1 '



дивизион2 =$ ( ( ${число[1]} / ${число[2]} ) )

эхо 'Отдел ${число[1]} а также ${число[2]} является: $дивизия2 '



дивизион3 =$ ( ( ${число[0]} / ${число[2]} ) )

эхо 'Отдел ${число[0]} а также ${число[2]} является: $дивизия2 '



быть

Приведенный выше сценарий выполняет различные арифметические вычисления на основе аргументов командной строки. Например, мы ввели 50, 35 и 15 в качестве входных данных:

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

Вы можете получить доступ к позиционным параметрам, поскольку они сначала обращаются к $1, затем к $2 и так далее. Например, давайте создадим скрипт, который считывает имя в качестве первого аргумента, а затем город в качестве второго. Однако, если вы сначала передаете город, а затем название, то оно считает название городом и наоборот. Давайте углубимся в следующий сценарий, чтобы понять эту концепцию:

#!/бин/баш

эхо 'Вот введенные данные'

эхо 'имя $1'

эхо 'город $2'

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

Подведение итогов

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