Введение
В программировании на Shell возможность передачи аргументов в скрипт является фундаментальной и мощной функцией. Это делает скрипты более гибкими и универсальными, позволяя им принимать входные данные прямо из командной строки. В ходе этой лабораторной работы вы научитесь создавать Shell-скрипты, способные принимать и использовать внешние параметры. Вы узнаете, как обращаться к этим аргументам внутри кода, обрабатывать произвольное их количество и использовать специальные переменные для эффективной работы с данными.
Создание нового файла скрипта
Начнем с создания нового файла для нашего скрипта. Для этой работы мы будем использовать встроенную среду разработки WebIDE (на базе VS Code).
- Откройте WebIDE, если она еще не открыта.
- В проводнике файлов слева перейдите в директорию
/home/labex/project. - Нажмите правой кнопкой мыши в области проводника и выберите "New File" (Новый файл).
- Назовите файл
arguments.sh.
Теперь, когда файл создан, добавим в него базовую структуру скрипта:
#!/bin/bash
## Your code will go here
Первая строка называется "shebang" (шебанг). Она указывает системе, какой интерпретатор следует использовать для выполнения данного файла. В нашем случае это bash.
Для начинающих: строка shebang важна, так как она позволяет запускать скрипт напрямую (например, ./arguments.sh) вместо того, чтобы каждый раз вводить bash arguments.sh. Это небольшая деталь, которая делает использование ваших инструментов гораздо удобнее.
Доступ к аргументам скрипта
Теперь модифицируем наш скрипт, чтобы он мог получать и отображать переданные ему данные. В Shell-скриптах для доступа к аргументам командной строки используются специальные переменные:
$0— обозначает имя самого скрипта.$1,$2,$3и так далее — обозначают первый, второй, третий аргументы соответственно.
Добавьте следующий код в файл arguments.sh:
#!/bin/bash
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
Этот скрипт выведет свое имя и первые три параметра, которые вы укажете при запуске.
Для начинающих:
- Символ
$используется в bash для обращения к значениям переменных. $0,$1,$2и прочие — это зарезервированные переменные, которые bash заполняет автоматически при запуске скрипта с параметрами.- Если запустить скрипт без аргументов, переменные
$1,$2и$3будут пустыми, но скрипт все равно выполнится без ошибок.
Настройка прав на выполнение
Прежде чем запустить скрипт, нам нужно сделать его исполняемым. Это выполняется с помощью команды chmod. В терминале перейдите в директорию проекта и выполните следующую команду:
cd /home/labex/project
chmod +x arguments.sh
Команда chmod +x добавляет файлу права на выполнение, что позволяет системе запускать его как программу.
Для начинающих:
chmodрасшифровывается как "change mode" (изменить режим). Она используется для настройки прав доступа к файлам и папкам.- Опция
+xдобавляет право на исполнение (execute). Без этого bash не сможет запустить файл как скрипт. - Если пропустить этот шаг, при попытке запуска вы получите ошибку "permission denied" (отказано в доступе).
Запуск скрипта с аргументами
Теперь, когда наш скрипт готов к работе, давайте запустим его, передав несколько параметров. Введите в терминале следующую команду:
./arguments.sh hello world example
Вы должны увидеть вывод, похожий на этот:
Script name: ./arguments.sh
First argument: hello
Second argument: world
Third argument: example
Этот результат подтверждает, что скрипт успешно прочитал и отобразил данные из командной строки.
Для начинающих:
- Префикс
./перед именем файла указывает bash искать скрипт в текущей директории. - Каждое слово после имени скрипта становится отдельным аргументом. В данном примере "hello" — это первый аргумент, "world" — второй, а "example" — третий.
- Если вы хотите передать аргумент, содержащий пробелы, его нужно заключить в кавычки:
./arguments.sh "hello world" example.
Обработка количества аргументов
Давайте усложним логику, чтобы скрипт по-разному реагировал на разное количество входных данных. Для этого воспользуемся специальной переменной $#, которая хранит общее число переданных аргументов.
Обновите содержимое arguments.sh следующим кодом:
#!/bin/bash
if [ $## -eq 0 ]; then
echo "No arguments provided."
elif [ $## -eq 1 ]; then
echo "One argument provided: $1"
elif [ $## -eq 2 ]; then
echo "Two arguments provided: $1 and $2"
else
echo "More than two arguments provided:"
echo "First argument: $1"
echo "Second argument: $2"
echo "Third argument: $3"
echo "Total number of arguments: $#"
fi
Здесь используются условные операторы для проверки количества параметров.
Для начинающих:
$#— это счетчик всех аргументов, переданных скрипту.[ $## -eq 0 ]— условие, проверяющее, равно ли количество аргументов нулю.elif— сокращение от "else if" (иначе если). Позволяет проверять несколько условий последовательно.- Оператор
-eqозначает "equal to" (равно). Также существуют операторы-lt(меньше),-gt(больше) и другие.
Тестирование обновленного скрипта
Проверим, как работает обновленный скрипт с разным набором параметров:
./arguments.sh
./arguments.sh one
./arguments.sh one two
./arguments.sh one two three four
Вы увидите, что вывод меняется в зависимости от того, сколько слов вы ввели после команды запуска.
Для начинающих:
- Запуск без аргументов (
./arguments.sh) активирует первое условие в коде. - Каждая последующая команда демонстрирует, как скрипт адаптируется к разному объему входных данных.
- Такая гибкость крайне важна в реальных сценариях автоматизации, когда скрипт должен уметь обрабатывать ошибки ввода или работать в разных режимах.
Перебор всех аргументов в цикле
Наконец, изменим скрипт так, чтобы он мог обрабатывать абсолютно все переданные аргументы, сколько бы их ни было. Для этого используем переменную $@, которая представляет собой список всех аргументов.
Обновите arguments.sh следующим образом:
#!/bin/bash
echo "Total number of arguments: $#"
echo "All arguments:"
count=1
for arg in "$@"; do
echo "Argument $count: $arg"
count=$((count + 1))
done
В этом примере используется цикл for для последовательного прохода по всем аргументам и их вывода с порядковым номером.
Для начинающих:
$@— специальная переменная, содержащая все аргументы командной строки как список.- Цикл
forиспользуется для повторения действий над каждым элементом списка. $((count + 1))— это арифметическое расширение в bash. Оно используется для увеличения значения переменной-счетчика.- Эта версия скрипта универсальна: она будет корректно работать и с одним, и со ста аргументами.
Тестирование финальной версии
Проверим работу итогового скрипта с произвольным набором слов:
./arguments.sh apple banana cherry date
Вывод должен быть примерно таким:
Total number of arguments: 4
All arguments:
Argument 1: apple
Argument 2: banana
Argument 3: cherry
Argument 4: date
Это доказывает, что теперь наш скрипт способен обрабатывать любое количество входных данных.
Для начинающих:
- Финальная версия скрипта гораздо мощнее предыдущих, так как она не ограничена жестко заданным количеством переменных.
- Нумерация аргументов помогает лучше структурировать вывод, что полезно в сложных сценариях обработки данных.
- Попробуйте запустить скрипт с разным количеством слов, чтобы закрепить понимание того, как работает цикл.
Резюме
В ходе этой лабораторной работы вы научились создавать Shell-скрипты, которые принимают и обрабатывают аргументы командной строки. Мы изучили следующие ключевые концепции:
- Создание скрипта и настройка прав на его выполнение.
- Доступ к отдельным параметрам через специальные переменные (
$1,$2и т.д.). - Использование переменной
$#для определения общего количества аргументов. - Реализация условной логики для обработки различных сценариев ввода.
- Использование переменной
$@и циклов для обработки неограниченного количества аргументов.
Эти навыки являются базовыми для написания Shell-скриптов. Они позволят вам создавать гибкие и мощные инструменты автоматизации, способные адаптироваться к различным входным данным в задачах системного администрирования.



