Материал: 6261

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

76

xlist=$(ls "$xdir" | grep $fl )

[ "x$xlist" != "x" ] || if_exit "${red}Нет тем${gray}, доступных для подключения...

"

echo

-e "${green}Список доступных тем$gray обучения..."

echo

"--------------------------------

"

for xx in ${xlist}; do

 

 

x1=$(echo $xx | cut -d '-' -f 1 )

done

echo -e "${yellow}${x1}$gray"

 

 

echo "--------------------------------

"

echo

-en "${green}Введи имя учебной темы$gray для подключения: "

read aa

 

export THEME="$aa"

 

echo

"Проверяем наличие архива...

"

xarch="${xdir}/${THEME}-$fl"

 

[ -f

"$xarch" ] || if_exit "${red}Отсутствует файл архива${gray}: ${xarch}"

warch="${wdir}/${THEME}-home.ext4fs"

#------------------------------------

# Копируем тему обучения

echo "Запоминаю тему обучения..."

echo "export UPK_THEME=$THEME" > ~/.upk_theme if [ "$xarch" != "$warch" ]; then

echo "Копирую файл архива в рабочую область..."

###sudo cp -v "$xarch" "$warch"

sudo /etc/upkasu/from-gzip "$xarch" "$warch"

fi

#------------------------------------

# Монтирование рабочей области:

echo -e "${green}Монтируем$gray файловую систему пользователя$yellow upk$gray \ в директорию$blue /home/upk$gray ..."

sudo mount -t ext4 "$warch" /home/upk -o loop

[ "$?" == "0" ] || if_exit "${red}Не могу смонтировать$gray $warch на /home/upk"

if [ -f "/home/upk/.upk_theme" ]; then

echo -e "\n"\

"Тема$blue $THEME -$green успешно подлючена...$gray \n"\

"Вам следует выйти из сессии пользователя$yellow asu$gray и подключитья \n"\ "как пользователь$yellow upk ${gray}!"

if_exit " "

fi

if_exit "Тема $THEME - подлючена (Необходима дополнительная проверка!!!)"

Листинг 3.2 — Сценарий mount-upk.sh — подключение архива студента

#!/bin/sh

#

#############################################################

#Reznik, 02.09.2016

#Копирование рабочей области пользователя upk на flashUSB

#Файл сценария: /etc/upkasu/copy-to-flash.sh

#############################################################

77

#

#Данный сценарий обеспечивает копирование рабочей области

#темы обучения на личный flashUSB студента.

#Используем функцию для вывода сообщения и выхода из программы: if_exit()

{

echo -e "$@"

read -p "Нажми клавишу Enter..." aa exit 0

}

#Читаем парметры окружения:

. /etc/upkasu/upkasu.conf

. /etc/upkasu/upk.colors

. ~/.upk_theme

echo "##########################################"

echo -e "${red}Копирование архива на flashUSB студента...${gray}\n" [ "$ROOT_ARCH" != "$ROOT_DIST" ] || \

if_exit "${green}Рабочая область и архив - одно и тоже устройство!!!${gray}"

#Находим устройства архива и дистрибутива ОС: xdev=$(blkid -U "$ROOT_ARCH")

[ "x$xdev" != "x" ] || \

if_exit "${yellow}Необходимо вставить устройство архива и попробовать снова!..${gray}"

xdir=$(mount | grep "$xdev" | cut -d ' ' -f 3 ) [ "x$xdir" != "x" ] || \

if_exit "${yellow}Подмонтируйте устройство архива... и попробуйте снова!..$ {gray}"

[ "x$xdir" != "x/" ] || xdir="" dira="${xdir}/${UPK_PATH}/themes" [ -d "$dira" ] || \

if_exit "Не могу найти директорию архива... Обратитесь к преподавателю!.."

#Проверяем монтирование рабочей области:

wdir="$UPK_MOUNT"

[ "x$wdir" != "x/" ] || wdir="" fa="${wdir}/${UPK_PATH}/themes/${UPK_THEME}-home.ext4fs" xx=$(mount | grep "$fa" )

[ "x$xx" == "x" ] || \

if_exit "${yellow}Сначала отключите тему, а потом - архивируйте!${gray}"

sudo /etc/upkasu/to-gzip "$fa" "${dira}/${UPK_THEME}-home.ext4fs.gz" || \

if_exit "${yellow}Не могу перенести архив... Обратитесь к преподавателю!..$ {gray}"

# Закончили копирование архива:

if_exit "${green}Перенесено:$blue из ${fa}$red в ${dira}/${UPK_THEME}- home.ext4fs.gz${gray}"

Кроме управляющих конструкций, shell содержит ряд встроенных (специальных) команд.

Замечание

Если не оговорено иное, команды выводят результаты в файл с дескриптором 1.

78

:Пустая команда. Возвращает нулевой код завершения.

.файл

Shell читает и выполняет команды из файла, затем возобновляется чтение со стандартного ввода; при поиске файла используется значение переменной

PATH.

break [n]

Выйти из внутреннего for или while цикла; если указано n, то выйти из n внутренних циклов.

continue [n]

Перейти к следующей итерации внутреннего for или while цикла; если указано n, то перейти к следующей итерации n-ого цикла.

cd

[каталог]

 

 

 

 

 

 

 

Сделать текущим заданный каталог. Если каталог не

 

указан, используется значение переменной HOME. Пе-

 

ременная CDPATH определяет список поиска каталога.

 

По умолчанию этот список пуст (то есть поиск

про-

 

изводится только в текущем каталоге). Если каталог

 

начинается с символа /, список поиска не использу-

 

ется.

 

 

 

 

 

 

echo

[аргумент ...]

 

 

 

 

 

 

 

Выдать аргументы на стандартный вывод, разделяя их

 

пробелами [см. также echo(1)].

 

 

 

 

 

 

eval

[аргумент ...]

 

 

 

 

 

 

 

Выполнить команду, заданную аргументами eval.

 

exec

[аргумент ...]

 

 

 

 

 

 

 

Сменить программу процесса: в рамках текущего про-

 

цесса команда, заданная аргументами exec, заменяет

 

shell. В качестве аргументов

могут

быть

указаны

 

спецификации ввода/вывода и, если нет никаких дру-

 

гих аргументов, будет лишь переназначен ввод/вывод

 

текущего shell'а.

 

 

 

 

 

 

exit

[код_завершения]

 

 

 

 

 

 

 

Завершить выполнение shell'а

с

указанным

кодом.

 

При отсутствии аргумента код завершения

определя-

 

ется последней выполненной командой. Чтение симво-

 

ла конца файла также приводит

 

к

завершению

 

shell'а.

 

 

 

 

 

 

export [переменная ...]

 

 

 

 

 

 

 

Заданные переменные отмечаются для автоматического

 

экспорта в окружение выполняемых команд. Если

ар-

 

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

экспор-

 

тируемых переменных. Имена функций не

могут

экс-

 

портироваться. Имена переменных,

экспортированных

 

из родительского shell'а, выдаются

только

в

том

 

случае, если они были экспортированы и из текущего

 

shell'а.

 

 

 

 

 

 

getopts

Используется в shell-процедурах для поддержания синтаксических стандартов [см. intro(1)]; разбирает позиционные параметры и проверяет допустимость задания опций [см. getopts(1)].

hash [-r] [имя_команды ...]

79

Для каждого из указанных имен_команд

определяется

и запоминается маршрут поиска - место в списке по-

иска, где удалось найти команду. Опция -r

удаляет

все запомненные данные. Если не указан ни один

ар-

гумент, то выводится информация о запомненных

ко-

мандах: hits - количество обращений shell'а к дан-

ной команде; cost - объем работы

для

обнаружения

команды в соответствии со списком поиска;

command

- полное имя команды. Звездочкой

в

колонке

hits

помечаются команды, маршрут поиска

которых

будет

перевычисляться после смены текущего каталога [см.

cd(1)]; расходы на перевычисление

учитываются в

колонке cost.

 

 

 

 

newgrp

[аргумент ...]

 

 

 

 

Выполяет регистрацию пользователя в новой группе

[man 1 newgrp].

 

 

 

 

pwd Выводит имя текущего каталога. [см. pwd(1)].

 

read

[переменная ...]

 

 

 

 

Со стандартного ввода читается одна строка

и

де-

лится на слова с учетом разделителей,

перечислен-

ных в значении переменной IFS (обычно

это

пробел

или табуляция); первое слово присваивается

первой

переменной, второе - второй и т.д., причем все ос-

тавшиеся слова присваиваются последней переменной. Исходная строка имеет продолжение, если в конце ее стоит последовательность \перевод_строки. Символы, отличные от перевода строки, также могут быть экранированы с помощью \, который удаляется перед присваиванием слов. Возвращается нулевой код завершения, если только не встретился конец файла.

readonly [переменная ...]

Указанные переменные отмечаются как доступные только на чтение. Присваивания таким переменным трактуются как ошибки. Если аргументы не указаны, то выводится информация обо всех переменных, доступных только на чтение.

return [код_завершения]

Выйти из функции с указанным кодом_завершения. Если аргумент опущен, то код завершения наследуется от последней выполненной команды.

set [-a] [-e] [-f] [-h] [-k] [-n] [-t] [-u] [-v] [-x] [--] [аргумент …]]

-a Экспортировать переменные, которые изменяются или создаются, в окружение.

-e Выйти из shell'а, если какая-либо команда возвращает ненулевой код завершения.

-f Запретить генерацию имен файлов.

-h Определить и запомнить местоположение всех команд, входящих в тело функции, во время ее определения, а не во время выполнения.

-k Поместить в окружение команды все переменные, получившие значение в командной строке, а не только те, что предшествуют имени команды.

-n Читать команды, но не выполнять их.

80

-t Выйти из shell'а после ввода и выполнения одной команды.

-u Рассматривать подстановку параметров, не получивших значений, как ошибку.

-v Выводить исходные для shell'а строки сразу после их ввода.

-x Выводить команды и их аргументы непосредственно перед выполнением.

--Не изменяет флаги. Полезно использовать для присваивания позиционному параметру $1 значения -:

set -- -

При указании + вместо - перечисленные выше режимы выключаются. Описанные флаги могут также использоваться при запуске shell'а. Набор текущих флагов есть значение переменной $-. Следующие за флагами аргументы будут присвоены позиционным параметрам $1, $2 и т.д. Если не заданы ни флаги, ни аргументы, выводятся значения всех переменных.

shift [n]

Позиционные параметры, начиная с (n+1)-го, переименовываются в $1 и т.д. По умолчанию n=1.

test Вычислить условное выражение [см. test(1)].

times Вывести суммарные времена пользователя и системы, затраченные на выполнение процессов, запущенных данным shell'ом.

trap [имя_команды] [n] ...

Команда с указанным именем будет прочитана и выполнена, когда shell получит сигнал(ы) n. Заметим, что имя_команды обрабатывается при установке прерывания и при получении сигнала. Команды выполняются в порядке номеров сигналов. Нельзя установить обработку прерывания по сигналу, игнорируемому данным shell'ом. Попытка установить обработку прерывания по сигналу 11 (выход за допустимые границы памяти) приводит к ошибке. Если имя_команды опущено, то для прерываний с указанными номерами n восстанавливается первоначальная реакция. Если имя_команды есть пустая строка, то этот сигнал будет игнорироваться shell'ом и вызываемыми им программами. Если n равно 0, то указанная команда выполняется при выходе из shell'а. Trap без аргументов выводит список команд, связанных с каждым сигналом.

type [имя ...]

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

ulimit [размер_в_блоках]

Установить максимальный размер_в_блоках (по 1 Кб) тех файлов, в которые пишут данный shell и его потомки (читать можно файлы любого размера) [см. ulimit(1)]. Если размер не указан, выдается текущий лимит. Каждый пользователь может уменьшить

Источник: https://studfile.net/preview/16438529/