Как передать аргументы в сценарий Bash
Напишите сценарий Bash, чтобы он получал аргументы, которые указываются при вызове сценария из командной строки. Используйте этот метод, когда скрипт должен выполнять несколько иную функцию в зависимости от значений входных параметров, также называемую аргументы.
Пример передачи аргументов в сценарии Bash
Если вы разработали сценарий под названием stats.sh который считает слова в файле, лучше всего передать имя файла в качестве аргумента, чтобы один и тот же сценарий можно было использовать для всех файлов, которые будут обрабатываться. Например, если имя обрабатываемого файла список песенвведите в командной строке следующее:
sh stats.sh список песен
Доступ к аргументам осуществляется внутри скрипта с помощью переменных $1, $2, $3, и так далее. Переменная $1 относится к первому аргументу, $2 ко второму аргументу, и $3 к третьему аргументу. Например, в скрипте:
FILE1 = $ 1
wc $ FILE1
Назначьте переменную с описательным именем значению первого аргумента ($1), а затем вызовите утилиту подсчета слов (Туалет) от переменной $ FILE1 или что еще вы можете сделать.
Если вам требуется переменное количество аргументов, используйте $@ переменная, представляющая собой массив всех входных параметров. В этой процедуре используется для цикла для итеративной обработки каждого из них, как показано в следующем примере:
для FILE1 в "$ @"
делать
wc $ FILE1
сделано
Вот пример того, как вызвать этот скрипт с аргументами из командной строки:
sh stats.sh список песен1 список песен2 список песен3
Если аргумент включает пробелы, заключите его в одинарные кавычки. Например:
sh stats.sh 'список песен 1' список песен 2 'список песен 3'
Метод флагов
Часто сценарий написан так, что аргументы могут передаваться в любом порядке с использованием флагов. С помощью метода flags некоторые аргументы можно сделать необязательными.
Например, напишите сценарий, который извлекает информацию из базы данных на основе заданных параметров, таких как имя пользователя, Дата, а также продукт, и создает отчет в указанном формате. Сценарий должен быть написан таким образом, чтобы эти параметры передавались при вызове сценария. Это могло бы выглядеть так:
makereport -u jsmith -p ноутбуки -d 10-20-2011 -f pdf
Bash включает эту функцию с помощью Getopts функция. В приведенном выше примере используйте Getopts следующее:
в то время как getopts u: d: p: f: option
делать
case "$ {option}"
в
u) USER = $ {OPTARG} ;;
г) ДАТА = $ {OPTARG} ;;
p) PRODUCT = $ {OPTARG} ;;
f) FORMAT = $ {OPTARG} ;;
esac
сделано
Это цикл while, в котором используется Getopts функция и так называемый optstring-в этом случае u: d: p: f:- перебрать аргументы. В в то время как цикл проходит через optstring, который содержит флаги, которые используются для передачи аргументов, и присваивает значение аргумента, предоставленное для этого флага, переменной вариант. В кейс оператор затем присваивает значение переменной вариант в глобальную переменную, которая используется после чтения всех аргументов.
Значение двоеточия
Двоеточие в строке optstring означает, что для соответствующих флагов требуются значения. В приведенном выше примере u: d: p: f:, после всех флагов ставится двоеточие. Это означает, что всем флагам нужно значение. Если, например, d а также ж флаги не должны были иметь значение, u: dp: f будет optstring.
Начальное двоеточие переводит getopts в «тихий режим отчетов». Вместо того, чтобы полностью привести сценарий к ошибке, любой неожиданный аргумент заполняет? вариант, и вы можете искать или обрабатывать его по мере необходимости. Без начального двоеточия в optstring терминал выдает ошибку. Например, у меня есть сценарий сверху, который считает слова. Ожидается синтаксис типа "stats.sh -f filename". Без двоеточия, если я попробую "stats.sh -h", я получу:
stats.sh -h
stats.sh: недопустимая опция - h
Принимая во внимание, что с помощью двоеточия я могу затем поместить строку в свой сценарий, ожидая чего-то вроде этого, например -?) Echo "Нет - аргумент $ {OPTARG} найден.";;. Затем это позволяет мне фиксировать и обрабатывать неожиданную запись (в данном случае путем вывода собственного сообщения об ошибке).
stats.sh -h
Аргумент -h не найден.
Аргументы, которым не предшествует флаг, игнорируются Getopts. Если флаги, указанные в optstring, не указаны при вызове скрипта, ничего не произойдет, если вы специально не обработаете этот случай в своем коде. Любые аргументы, не обрабатываемые Getops все еще может быть захвачен обычным $1, $2, а также $3 переменные.