Специальные параметры

Практическое задание

Операторы цикла

В оболочке имеются несколько операторов для организации циклов. Первый из них это оператор for:

for имя [ in слово ] ; do список ; done

Список слов, следующих за in раскрывается, образуя последовательность значений. Перемен­ной имя поочередно присваиваются все эти значения, при этом каждый раз выполняется список. Если конструкция in слово опущена, список выполняется один раз для каждого установленного позиционного параметра. Код завершения равен коду завершения последней выполненой коман­ды. Если раскрытие элементов следующих за in дает в результате пустой список, то выполнения команд не происходит и код завершения равен нулю.

select имя [ in слово ] ; do список ; done

Список слов, следующих за in раскрывается, образуя последовательность значений. Множество полученных значений выводится на стандартный вывод ошибок, каждое значение предваряется номером. Если конструкция in слово опущена, печатается список позиционных параметров. За­тем выводится промпт PS3 и считывается строка со стандартного ввода. Если строка содержит номер соответствующий одному из выведенных слов, то значение переменной имя устанавли­вается равным этому слову. Если строка пустая, то список печатается повторно. Если строка содержит EOF (вводится нажатием клавиш Ctrl-D), то цикл завершается. Любое другое значение приводит к тому, что переменная имя устанавливается в ноль. Полученная строка сохраняется в переменной REPLY. После каждого выбора выполняется список. Цикл повторяется до выполне­ния команды break или return. Код завершения равен коду завершения последней выполненой команды или нулю если команды не выполнялись.

while список1; do список2; done

until список1; do список2; done

Команда while выполняет список2 пока список1 завершается с кодом ноль. Команда until

аналогична, но выполняет список2 до тех пор, пока список1 не завершится с кодом ноль. Код

завершения команды равен коду завершения последней выполненой команды или нулю если ни

одной команды не было выполнено.

1. Создайте в домашнем каталоге подкаталог bin.

2. Выведите на экран значение переменной PATH и убедитесь, что она содержит созданный Вами каталог bin.

3. При помощи редактора vim создайте файл bin/s1.sh:

for file ; do

echo " --- $file -- "

head -n 10 $file done

4. Измените права доступа к файлу. Для этого выполните команду
chmod +x bin/s1.sh

Команда добавляет разрешение на выполнение файла.

5. Выполните сценарий следующим образом:

s1.sh /home/labs/text.txt /home/labs/dao.txt


6. Сохраните результат в файле отчёта.

7. Напишите сценарий, получающий в качестве первого аргумента имя каталога и выводящий список тех файлов из этого каталога, имена которых содержат последовательность симво­лов определенную вторым аргументом. Сценарий споместите в подкаталоге bin домашнего каталога и назовите s2.sh.

8. Напишите сценарий, который выводит пронумерованный список файлов с расширением txt в текущем каталоге, ожидает от пользователя ввода номера файла, выводит первые десять строк заданного файла и повторяет цикл. Сценарий сохраните под именем list.sh в каталоге bin.

9. Встроенная команда интерпретатора read имя считывает строку со стандартного ввода и записывает её в переменную имя. Команда возвращает код завершения ноль если строка была успешно считана и код отличный от нуля если произошла ошибка или встретился конец файла. Напишите сценарий, который считывает строки со стандартного ввода и выводит их на стандартный вывод. (Используйте цикл while). Сценарий сохраните под именем s3.sh.

 

 

Лабораторная работа № 8

Написание сценариев.

Специальные параметры трактуются оболочкой особым образом. Имена специальных параметров состоят из одного символа. Значения этих параметров можно только читать.

* Раскрывается в строку позиционных параметров начиная с первого. Если * использует­
ся внутри двойных кавычек, то преобразуется в одно слово, состоящее из позиционных
параметров разделенных первым символом переменной IFS. Если IFS – NULL, то пара­
метры объединяются, если IFS не установлена, то параметры разделяются пробелами.

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

# Число позиционных параметров в десятичном виде.

? Статус завершения последнего выполненого конвейера.

- Список опций заданных в командной строке, установленных встроенной командой set или самой оболочкой.

$ ID процесса оболочки. В подоболочках $ сохраняет значение и выдает ID процесса оболочки, а не подоболочки.

! ID процесса последней выполненной в фоновом режиме команды.

0 Имя оболочки или сценария.