При написании сценариев часто требуется перехватить результат выполнения команды для использования его в сценарии командной оболочки; т. е. выполнить команду и поместить ее вывод в переменную. Сделать это можно с помощью синтаксической конструкции $(команда).
Результат выполнения конструкции $ (команда) — просто вывод команды. Имейте в виду, что это не статус возврата команды, а просто строковый вывод, показанный далее.
#!/bin/sh
echo The current directory is $PWD
echo The current users are $(who)
exit 0
Поскольку текущий каталог — это переменная окружения командной оболочки, первая строка не нуждается в применении подстановки команды. Результат выполнения программы who, напротив, нуждается в ней, если он должен стать переменной в сценарии.
Если вы хотите поместить результат в переменную, то можете просто присвоить его обычным образом whoisthere=$(who)
Возможность поместить результат выполнения команды в переменную сценария — мощное средство, поскольку оно облегчает использование существующих команд в сценариях и перехват результата их выполнения. Если необходимо преобразовать набор параметров, представляющих собой вывод команды на стандартное устройство вывода, и передать их как аргументы в программу, команда xargs сможет это сделать.
Встроенные документы
Особый способ передачи из сценария командной оболочки входных данных команде – использование встроенного документа. Такой документ позволяет команде выполняться так, как будто она читает данные из файла или с клавиатуры, в то время как на самом деле она получает их из сценария.
Встроенный документ начинается со служебных символов
Пример 17.Применение встроенного документа
#!/bin/sh
cat
Это пример встроенного
документа для описания сценария
!BUILTdoc!
Пример 17 выводит на экран следующие строки
Это пример встроенного
документа для описания сценария
Отладка сценариев
При обнаружении ошибки при выполнении сценария командная оболочка выводит на экран номер строки, содержащей ошибку. Если ошибка сразу не видна, нужно добавить несколько дополнительных команд echo для вывода значений переменных и протестировать фрагменты программного кода, вводя их в командной оболочке в интерактивном режиме. Основной способ отслеживания наиболее трудно выявляемых ошибок – использование отладочных опций командной оболочки.
Отладочные опции командной строки приведены в табл. 5.
Таблица 5. Отладочные опции командной строки
Опция | Назначение |
sh–n | Только проверяет синтаксические ошибки |
sh–v | Выводит на экран команды перед их выполнением |
sh–x | Выводит на экран команды после обработки командной строки |
sh–u | Выдает сообщение об ошибке при использованиинеопределенной переменной |
МЕТОДИКА ВЫПОЛНЕНИЯ
1. Получить полный список ключей команды stat.
2. Написать и выполнить сценарии для решения перечисленных задач.
- в каталоге, указанным первым параметром сценария, найти количество:
— подкаталогов;
-выполняемых файлов;
-файлов, доступных для чтения;
-файлов, доступных для записи.
- в каталоге, указанным первым параметром сценария, найти количество файлов, размер которых (в байтах) более значения, указанного вторым параметром сценария.
- вычисление факториала числа, указанного первым параметром сценария. Задачу решить двумя способами.
- используя имя файла, указанное первым параметром сценария, найти размеры свободного и занятого дискового пространства.
- в каталоге, указанным первым параметром сценария, найти имена файлов, содержащих слово «shell».
- найти первые N чисел Фибоначчи, используя рекуррентное соотношение
Ai+1=Ai+Ai-1
Значения первых двух чисел и необходимое количество чисел N ввести с клавиатуры.
Индивидуальные задания для бригад приведены в таблице 6
Таблица 6. Индивидуальные задания для бригад
№№ бригад | Задание (набригаду) |
Найти суммарный объем исполняемыхфайлов в текущем каталоге | |
В текущем каталоге найтидоступный для чтения и записи файл наибольшего размера | |
Вывести имена файлов текущегокаталога, начинающихся на буквы a или b | |
В текущем каталоге найти имяфайла, который был изменен позже всех | |
Написать сценарий для проверки,имеются ли в двух подкаталогах, имена которых задаются первым и вторымпараметрами сценария, файлы с одинаковыми именами | |
Написать сценарий для проверки,имеются ли в двух подкаталогах, имена которых задаются первым и вторымпараметрами сценария, файлы одинакового размера | |
В каталоге, имя которого заданопервым параметром сценария, найти имена файлов, у которых имеется более однойжесткой ссылки | |
В каталоге, имя которого заданопервым параметром сценария, найти количество подкаталогов, имена которыхначинаются на символ, указанный вторым параметром сценария | |
Для введенного с клавиатурыцелого числа вывести на экран список его делителей. Считать, что число не превышает1000000. Операция нахождения остатка от деления числа a на число b обозначается% | |
Для каталога, имя которогозадано первым параметром сценария, вывести список файлов в виде таблицы суказанием следующих значений: имя файла, номер inode, размер, типфайла, права доступа к файлу | |
В текущем каталоге и егоподкаталогах найти файлы, созданные в течение последней недели. | |
Используя команду printf,написать сценарий для перевода введенного с клавиатуры целого положительногочисла в восьмеричную и шестнадцатеричную системы счисления. |
- Ответитьна контрольные вопросы.
- Подготовитьотчет по работе. Содержание отчета:
— тексты сценариев для выполнения заданий п.2 и индивидуального задания;
— результаты выполнения сценариев (скриншоты или текст – по выбору).
КОНТРОЛЬНЫЕ ВОПРОСЫ
Статьи к прочтению:
- Выполнения программы производственной (преддипломной) практики)
- Выполненную работу и отчет о выполнении показать преподавателю.
КАК ПОЛУЧИТЬ НОВЫЕ СЕКРЕТНЫЕ ДОСТИЖЕНИЯ В WARFACE | КАК ВЫПОЛНИТЬ СЕКРЕТНЫЕ ДОСТИЖЕНИЯ В WARFACE
Похожие статьи:
-
Выполнение проектов и их результаты.
По умолчанию компилятор VB.NET устанавливает режим явного объявления переменных. Таким образом, в программе непременно должен присутствовать оператор…
-
Результат выполнения этой программы выглядит следующим образом.
Имя объекта, на который ссылается переменная AlphaRef: Alpha #1 Имя объекта, на который теперь ссылается переменная AlphaRef: Beta #1 Следует особо…