Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Передача параметров в командные файлы и специальные переменные

Поиск

 

При вызове командного файла на выполнение параметры ему могут быть переданы точно таким же образом, как и выполняемой программе. С точки зрения командного файла эти параметры являются позиционными. Символ $ является метасимволом командного процессора. Он используется, в частности, для ссылки на параметры, точнее, для получения их значений в командном файле. В командный файл можно передать до девяти параметров. При использовании где-либо в командном файле комбинации символов $i, где 0<i<10, вместо нее будет осуществлена подстановка значения параметра с порядковым номером i, т.е. аргумента командного файла с порядковым номером i. Использование комбинации символов $0 приводит к подстановке вместо нее имени данного командного файла. Рассмотрим это на примере.

Пусть к командному файлу where имеется доступ по выполнению и этот командный файл содержит следующий конвейер:: who | grep $1.

Если Вы введете с терминала команду: where andy, то в случае, если пользователь, зарегистрированный в ОС UNIX под именем andy, в данный момент работает в ОС UNIX, на терминал будет выведена строка, содержащая номер терминала, используемого указанным пользователем. Если же в данный момент этот пользователь не работает в ОС UNIX, то на терминал не будет выведено ничего. Команда grep производит контекстный поиск в тексте, поступающем со стандартного ввода, для нахождения в этом тексте строк, содержащих последовательности символов, переданные ей в качестве аргументов, и выводит результаты своей работы на стандартный вывод. В этом примере команда grep используется как фильтр, обеспечивающий ввод со стандартного ввода и вывод всех строк, содержащих последовательность символов andy, на стандартный вывод.

В ходе интерпретации этого файла командным процессором вместо комбинации символов $1 осуществляется подстановка значения первого и единственного параметра andy. Если предположить, что пользователь, зарегистрированный в ОС UNIX под именем andy, в данный момент работает в ОС UNIX, то на терминале Вы увидите примерно следующее:

$where andy

andy ttyG Jan 14 09:12

$

Определим функцию, которая изменяет каталог и печатает список файлов:

$function clist {

> cd $1

> ls

> }

Теперь при вызове команды clist каталог будет изменен каталог и выведено его содержимое.

Команда shift позволяет удалять первый параметр и сдвигает все остальные на места предыдущих.

При использовании в командном файле комбинации символов $# вместо нее будет осуществлена подстановка числа параметров, указанных в командной строке при вызове данного командного файла на выполнение.

Вот еще несколько специальных переменных, используемых в командных файлах:

$* – отображается вся командная строка или параметры оболочки;

$? – код завершения последней выполненной команды;

$$ – уникальный идентификатор процесса, в рамках которого выполняется командный процессор;

$! – номер процесса, в рамках которого выполняется последняя вызванная на выполнение в командном режиме команда;

$- – значение флагов командного процессора;

${#*} – возвращает целое число – количество слов, которые были результатом $*;

${#name} – возвращает целое значение длины строки в переменной name;

${name[n]} – обращение к n-ному элементу массива;

${name[*]} – перечисляет все элементы массива, разделенные пробелом;

${name[@]} – то же самое, но позволяет учитывать символы пробелы в самих переменных;

${name:-value} – если значение переменной name не определено, то оно будет заменено на указанное value;

${name:value} – проверяется факт существования переменной;

${name=value} – если name не определено, то ему присваивается значение value;

${name?value} – останавливает выполнение, если имя переменной не определено, и выводит value, как сообщение об ошибке;

${name+value} – это выражение работает противоположно ${name-value}. Если переменная определена, то подставляется value;

${name#pattern} – представляет значение переменной name с удаленным самым коротким левым образцом(pattern);

${#name[*]} и ${#name[@]} – эти выражения возвращают количество элементов в массиве name.

 



Поделиться:


Последнее изменение этой страницы: 2021-01-14; просмотров: 96; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.73.167 (0.006 с.)