Чтение параметров командной строки в скрипте Bash

Зачастую запуск скриптов из командной строки требует передачу ему различных параметров, это может быть имя файла, либо параметры работы скрипта (например "-fr", "-h" или "file.txt").

Чтение параметров (аргументов) командной строки по их позициям

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

В частности, параметры командной строки обозначаются цифрами, которые увеличиваются в порядке появления в командной строке (например, $1 для первого, $2 для второго аргумента, ...).

Для обращения к параметру командной строки в котором более одной цифры (например, 10-й), необходимо окружить N символом {} (например, ${10}). $0 — это специальный параметр bash, в котором хранится имя сценария.

Пример ниже проверяет существование первого и второго параметра командной строки и выводит их значение, при наличии

Следующий скрипт позволяет проверить общее количество параметров командной строки. (специальный параметр bash $# - содержит общее количество параметров)

Чтение аргумента командной строки с помощью цикла for

Для проверки параметров командной строки, особенно когда не известно сколько из было передано возможно с использованием цикла for, обратившись к специальному параметру bash - $@, который расширяется до списка предоставленных параметров командной строки. Поскольку $@ является интерпретируемым списком, возможно использовать цикл for для чтения каждого аргумента в списке.

Необходимо $@ заключить в кавычки, если какой-либо аргумент командной строки содержит пробелы.

Чтение параметров командной строки с помощью getopts

В некоторых случаях может понадобиться обрабатывать параметры командной строки в сценарии, которые могут указываться или не указываться в командной строке. Параметры командной строки обычно представляют собой отдельные буквы, которым предшествует один дефис. Некоторые параметры используются отдельно (например, -h), в то время как другие параметры и их аргументы предоставляются вместе (например, -f file.txt). Когда сценарий считывает параметры командной строки, важно не положение параметра в командной строке, а то, какой флаг параметра используется.

Bash предоставляет встроенную функцию getopts для обработки таких параметров командной строки.

В примере ниже, цикл while выполняет перебор всех возможных параметров командной строки и обрабатывает их.

 

Понравилась статья? Поделиться с друзьями:
Добавить комментарий