Как передать аргументы скрипту Bash

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

Пример передачи аргументов в скрипте Bash

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

sh stats.sh список песен

Доступ к аргументам осуществляется внутри скрипта с использованием переменных $ 1, $ 2, $ 3 и т. Д. Переменная $ 1 относится к первому аргументу, $ 2 ко второму аргументу и $ 3 к третьему аргументу. Это иллюстрируется в следующем примере:

FILE1 = $ 1
wc $ FILE1

Для удобства чтения назначьте переменную с описательным именем значению первого аргумента ($ 1), а затем вызовите утилиту подсчета слов (WC) для переменной $ FILE1.

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

для ФАЙЛА1 в "$ @"
делать
wc $ FILE1
сделанный

Вот пример того, как вызвать этот скрипт с аргументами из командной строки:

sh stats.sh songlist1 songlist2 songlist3

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

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Флаги Метод

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

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

makereport -u jsmith -p ноутбуки -d 10-20-2011 -f pdf

Bash включает эту функцию с помощью функции getopts. Для приведенного выше примера используйте getopts следующим образом:

пока getopts u: d: p: f: опция
делать
case "$ {option}"
в
u) USER = $ {OPTARG} ;;
г) ДАТА = $ {OPTARG} ;;
p) PRODUCT = $ {OPTARG} ;;
f) FORMAT = $ {OPTARG} ;;
ESAC
сделанный

Это цикл while, который использует функцию getopts и так называемую строку опций — в данном случае u: d: p: f: — для перебора аргументов. Цикл while проходит по optstring, которая содержит флаги, которые используются для передачи аргументов, и присваивает значение аргумента, предоставленное для этого флага, переменной option. Затем оператор CASE присваивает значение параметра переменной глобальной переменной, которая используется после прочтения всех аргументов.

Значения для двоеточий

Двоеточие в строке опций означает, что значения необходимы для соответствующих флагов. В приведенном выше примере u: d: p: f: за всеми флагами следует двоеточие. Это означает, что все флаги нуждаются в значении. Если, например, не ожидается, что флаги d и f будут иметь значение, u: dp: f будет строкой optstring.

Двоеточие в начале строки опций (например,: u: d: p: f 🙂 имеет совершенно другое значение. Он обрабатывает флаги, которые не представлены в строке optstring. В этом случае значение переменной option устанавливается равным? и значение OPTARG устанавливается на неожиданный флаг. Это поведение отображает подходящее сообщение об ошибке, информирующее вас об ошибке.

Аргументы, которым не предшествует флаг, игнорируются getopts. Если флаги, указанные в строке опций, не предоставляются при вызове скрипта, то ничего не происходит, если вы специально не обработаете этот случай в своем коде. Любые аргументы, не обрабатываемые getops, могут по-прежнему записываться с помощью обычных переменных $ 1, $ 2 и $ 3.

Ссылка на основную публикацию