Язык обработки данных AWK

       

Разбор командной строки


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

  • Раскрывает псевдонимы ( alias)

  • Раскрывает метасимволы (*, ?, [, ], ~, {, })

  • Подставляет переменные shell

  • Выполняет команду, если она - встроенная команда интерпретатора, или запускает процесс, если команда внешняя.

    Разберем эти действия по этапам.

    Псевдонимы (alias). Встроенная команда alias позволяет определять псевдонимы команд. Пример:

    % alias mycat 'cat | more'

    определяет mycat как псевдоним строки cat | more. Поэтому далее вы вправе пользоваться командой mycat, которая будет раскрыта интерпретатором везде, где вы ее используйте. Это - способ определения коротких имен для длинных составных команд.

    Встроенная команда unalias mycat уничтожает ранее введенный псевдоним mycat.

    Метасимволы. Метасимволы позволяют кратко записывать целые списки слов (главным образом - имен файлов). Shell рассматривает слово, в котором встречаются метасимволы, как шаблон для составления списка имен файлов:

  • * в шаблоне заменяет любую последовательность символов. Например m* раскроется в список всех файлов, начинающихся с буквы m. Существует небольшое исключение из этого правила: просто * опускает в списке те файлы, имена которых начинаются с точки.

  • ? заменяет один символов. Например m? раскроется в список всех имен файлов, начинающихся с буквы m и состоящих точно из двух букв.



  • [.-.] позволяет указать интервал для подставляемого символа. Например m[a-e] будет раскрыто в ma mb mc me.

  • {...,...} позволяет перечислить слова для подстановки. Так, например m{red,blue,green} будет раскрыто в mred mblue mgreen.

    Наконец, тильда позволяет указать домашний каталог пользователя:

  • ~name/ эквивалентно указанию полного пути в домашний каталог пользователя name (Скажем, /usr1/name/)

  • ~/ эквивалентно указанию полного пути в ваш собственный домашний каталог.

    Переменные shell. Слова, начинающиеся с символа $ командный интерпретатор воспринимает как имена переменных. Переменные делятся на переменные окружения (они будут известны всем вызванным из этой shell программам и являются в этом смысле глобальными) и простые переменные.




    Встроенная команда set name= value позволяет определить простую переменную с именем name и дать ей значение value. Встретив в командной строке выражение $name интерпретатор заменит его на value. Например,

    % set color=blue

    % echo $color

    выдаст на терминал строчку blue. А

    % set color=blue

    % echo new$color

    даст newblue. Наконец, введя

    % set color=blue

    % echo ${color}new

    получим colornew. Последний пример демонстрирует как надо использовать фигурные скобки для выделения имени переменной из слова (на echo $colornew интерпретатор бы ответил, что переменная colornew не определена.

    Команда unset уничтожает ранее определенные переменные.

    Чтобы определить переменную равной строке из нескольких слов, заключите ее в простые кавычки. Пример

    % set color='blue or red or green'

    Простые переменные могут быть массивами слов (что надо отличать от только что рассмотренного случая, когда переменная содержит строку из нескольких слов. Для объявления массива надо использовать круглые скобки:

    % set colors=(blue red green)

    Теперь команда echo $colors выдаст строку из трех цветов (попробуйте!). Однако вы можете также работать в отдельными элементами массива (элементы нумеруются с нулевого значения), например так:

    % echo $colors[2]

    (получим green). Количество элементов в массиве содержится в переменной $#colors.

    % echo $#colors

    даст на терминал цифру 3.

    Возможны довольно сложные комбинации с использованием шаблонов, например:

    % set files=(m*)

    % echo $#files

    выдаст число файлов в текущем каталоге, начинающихся с буквы m.

    Переменные окружения вызываются точно также как и простые переменные. Разница заключается в способе их определения:

    Команда % setenv name value устанавливает переменную окружения с именем name. Обратите внимание на раздражающую разницу в синтаксисе: определяя переменную окружения не надо ставить знак =.

    Список всех переменных окружения можно получить с помощью встроенной команды printenv.

    Отменить определения переменной окружения можно с помощью unsetenv.

    Наконец, для определения массива переменных окружения НЕ используются круглые скобки, а используются двоеточия в качестве разделителей элементов массива:

    % setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man


    Содержание раздела