Напишите сценарий 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.