Вход/Регистрация
Командная строка Linux
вернуться

Шоттс Уильям

Шрифт:

Обработка позиционных параметров скопом

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

Для этой цели командная оболочка предоставляет два специальных параметра. Они оба замещаются полным списком позиционных параметров, но имеют некоторые тонкие отличия. Описание этих параметров приводится в табл. 32.1.

Таблица 32.1. Специальные параметры $* и $@

Параметр

Описание

$*

Замещается списком позиционных параметров, начиная с $1. Если имя параметра $* заключить в двойные кавычки, позиционные параметры будут перечислены в списке через первый символ в переменной IFS (по умолчанию пробел), а сам список будет размещен в одной строке и заключен в кавычки

$@

Замещается списком позиционных параметров, начиная с $1. Если имя параметра $@ заключить в двойные кавычки, механизм подстановки заменит его списком позиционных параметров, заключенных в кавычки по отдельности

Следующий сценарий демонстрирует, как действуют эти специальные параметры:

#!/bin/bash

# posit-params3 : сценарий для демонстрации $* и $@

print_params {

echo "\$1 = $1"

echo "\$2 = $2"

echo "\$3 = $3"

echo "\$4 = $4"

}

pass_params {

echo -e "\n" '$* :'; print_params $*

echo -e "\n" '"$*" :'; print_params "$*"

echo -e "\n" '$@ :'; print_params $@

echo -e "\n" '"$@" :'; print_params "$@"

}

pass_params "word" "words with spaces"

В этой довольно замысловатой программе мы создали два аргумента, word и words with spaces, и передали их функции pass_params. Эта функция, в свою очередь, передает их функции print_params, с применением каждого из четырех методов, доступных для специальных параметров $* и $@. Вывод сценария показывает разницу между ними:

[me@linuxbox ~]$ posit-param3

$* :

$1 = word

$2 = words

$3 = with

$4 = spaces

"$*" :

$1 = word words with spaces

$2 =

$3 =

$4 =

$@ :

$1 = word

$2 = words

$3 = with

$4 = spaces

"$@" :

$1 = word

$2 = words with spaces

$3 =

$4 =

В данном примере оба параметра, $* и $@, возвращают результат из четырех слов: word, words, with и spaces. "$*" возвращает результат в виде одного слова, содержащего пробелы: word words with spaces. "$@" возвращает результат в виде двух слов, второе из которых включает пробелы: word и words with spaces.

Это соответствует нашим фактическим намерениям. Этот пример показывает, что, несмотря на наличие четырех разных способов получения списка позиционных параметров, в большинстве ситуаций предпочтительнее использовать прием с "$@", потому что он сохраняет целостность каждого позиционного параметра.

Более сложное приложение

После долгой паузы мы продолжим работу над программой sys_info_page. Теперь мы добавим в нее поддержку нескольких параметров командной строки:

• Выходной файл. Мы добавим параметр, который позволит указать имя файла для вывода результатов работы программы. Сделать это можно будет с помощью -f файл или --file файл.

• Интерактивный режим. При передаче этого параметра программа будет предлагать пользователю ввести имя выходного файла и определять, существует ли этот файл. Если файл существует, пользователю будет предложено подтвердить свое решение, прежде чем затереть существующий файл. Этот параметр можно будет передать как -i или --interactive.

• Справка. Передав параметр -h или --help, можно потребовать от программы вывести сообщение с информацией о правилах пользования программой.

Далее приводится код, реализующий обработку командной строки:

usage {

echo "$PROGNAME: usage: $PROGNAME [-f file | -i]"

return

}

# обработка параметров командной строки

interactive=

filename=

while [[ -n $1 ]]; do

case $1 in

– f | --file) shift

  • Читать дальше
  • 1
  • ...
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: