Информатика ← ЛабораторныеЛабораторная работа №21

Программирование на интерпретируемых командных языках

Задание

Составить программу выполнения заданных действий над файлами на одном us интерпретируемых командных языков ОС UNIX (Shell, Cshell, Bash, ...) согласованном с преподавателем.

Варианты

  1. Копирование всех файлов, для которых установлена защита от записи для всех пользователей. Имена копий генерировать путем добавления указанного префикса. Файлы-копии должны быть доступны для записи всем пользоватслям.
  2. Объединение в один файл всех файлов с указанным суффиксом, имеющих размер меньше заданного.
  3. Удаление всех файлов с указанным суффиксом, к которым не было обращений указанное число дней.
  4. Переименование всех файлов с указанным суффиксом путем добавления к ним заданного префикса.
  5. *Реализовать шелловскую версию команды split иа соответствующем интерпретируемом командном языке.
  6. Кодирование по Цезарю всех текстовых файлов в указанном каталоге и его поддиректориях с помощью утилиты tr.
  7. Удаление всех файлов с указанным суффиксом при наличии файлов с теми же именами но с другим заданным суффиксом.
  8. Создание синонима всех файлов с указанным суффиксом и числом связей, большим одного, путем перестановки суффиксов в именах исходных файлов в начало и удаления точки.
  9. Удлинение имен файлов до указанной длины заданным знаком. l0. Сравнение указанного файла со всеми другими файлами, имеющими такой же суффикс, с удалением совпадающих файлов.
  10. Конкатенация указанного файла заданное число раз так, чтобы длина результирующего файла в байтах не превысила заданного числа.
  11. Генерация заданного числа копий указанного файла. Имена копий генерировать добавлением к имени исходного файла следующией по порядку буквы или цифры, начиная с заданной буквы или цифры.
  12. Конкатенация файлов наименьшей длины до тех пор, пока размер результирующего файла не превысит размера блока заданного устройства (файловой системы).
  13. Удаление файлов с указанным префиксом, длина которых, находится в указанном диапазоне.
  14. Удлинение файлов с указанным суффиксом до заданной длины путем присоединения к ним необходимого числа копий некоторого файла.
  15. Удаление файлов с указанным префиксом и с максимальными размерами, пока общий ралмер остающихся файлов не станет меньше заданного числа.
  16. Рекурсивный обход указанного каталога и перекодировка всех текстовых файлов в нем и в подкаталогах.
  17. Рекурсивный обход указанного каталога и замена всех разделителей пути \ на / в файлах с именем Makefile*.
  18. Подсчет числа строк в исходных файлах (*.h, *.срр) директории и подкаталогов с вычислением суммарной длины (в строках).
  19. Рекурсивный обход указанного каталога и вывод на экран полных путей поддиректории.
  20. *Удаление всех синонимов указанного файла из указанного каталога и его поддиректорий.
  21. Замена для всех файлов, имеющих размер меньше заданного, суффиксов имен на первые литеры имен файлов.
  22. Запись имен и размеров всех выполняемых файлов с указанным суффиксом в заданный файл, размер которого не должен превышать заданной величины.
  23. Запись имен и размеров всех невыполнимых файлов с указанным суффиксом в заданный файл, размер которых кратен размеру блока.
  24. Удаление файлов, суммарная длина которых не меньше заданного числа блоков.
  25. Рекурсивный обход и подсчет числа выполнимых файлов в каталоге и в поддиректориях.
  26. Рекурсивный обход, подсчет числа различных суффиксов файлов в указанном каталоге и вывод уникальных суффиксов. 28-29. * Интерпретация машины Тьюринга в четвёрках или в пятёрках.

Разработанная программа должна удовлетворять не менее чем двум из следующих дополнительных условий, согласованных с преподавателем:

  1. Если параметры опущены, то их значення должны быть запрошены у польлователя.
  2. Программа должна в случае ошибки в заданни параметров выводить комментированный синтаксис правильного использования.
  3. Если указан параметр «?», то выводится подсказка (спецификации программы).
  4. Программа должна обеспечивать возможность установки режима трассировки.
  5. Программа должна обеспечивать возможность установки режима подтверждения.
  6. Программа должна обеспечивать возможность исправления значений параметров после запуска в диалоговом режиме. 7. Программа должна обеспечивать порционный способ задання параметров (список слов через пробел или запятую).
  7. Если параметры опущены, то устанавливаются некоторые стандартные значення параметров.
  8. Программа должна обеспечивать задание списка ключевых параметров в формате «имя=значение» через запятую.
  9. Задание параметров в конфигурационном файле.

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

Текст лабораторной за прошлый год

↓Пример

#! /usr/bin/env bash

NAME="multcp"

#echo "Имя скрипта — $0"
#echo "Первый аргумент: $1"
#echo "Второй аргумент: $2"
#echo "Семнадцатый аргумент: ${17}"
#echo "Количество аргументов: $#"
#echo "Код возврата последнего процесса (функции или скрипта): $?"
#echo "Все аргументы в виде одной строки (слова): $*"
#echo "То же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово): $@"
#echo "Cписок флагов, переданных сценарию: $-"
#echo "Cодержит последний аргумент предыдущей команды: $_"

# The comment
print_help()
{
  echo ""
  echo "USAGE: $NAME PREFIX DIRECTORY DIRECTORY"
  echo ""
#  echo "Options:"
#  echo "    -h    displays this information"
  echo ""
  exit $1
}

alt_what_to_copy()
{
  res = `stat -c %n:::%a $from/* | grep -E "0$|1$|4$|5$" | sed "s/:::[0-9]*$//"`
  echo "$res"
}

what_to_copy()
{
  res=`ls -hl $from | sed -n "/[r-][w-][x-][r-][w-][x-][r-]-[x-]/p" | sed -e "s/.*:[0-9][0-9]\ //g"`
  echo "$res"
}

copying()
{
  echo "`what_to_copy`" | while read name; do cp $from/"$name" $to/$pref"$name"; done
}

change_access()
{
  ls $to | while read file; do chmod a+w $to/"$file"; done
}

if [ $# != 3 ]; then
  print_help
fi

pref=$1
from=$2
to=$3

copying
change_access

Ссылки

  1. Оригинальный текст лабораторной
  2. Руководства по Unix-утилитам на русском
  3. О Баше (Wiki)
  4. Программирование на Баше (OpenNet)
  5. Регулярные выражения (OpenNet)
  6. Краткое описание утилиты sed (Wiki)
  7. Про функции в Баше (OpenNet)