Задача №1
Используя цикл и оператор выбора написать скрипт, реализующий следующее:
- Выводит на экран(в терминал) меню с выбором, состоящим из двух пунктов "1)" "2)"
- При выборе "1)" выводит текст на экран(в терминал), содержащий только цифру 1
- При выборе "2)" выводит текст на экран(в терминал), содержащий только цифру 2
- При вводе любого другого символа, выводит на экран сообщение о неправильном вводе и просит повторить ввод.
При неправильном вводе цикл бесконечен, т.е. продолжается пока не будет введён нужный символ, а затем снова выводится меню выбора.
Модернизировать(№1) скрипт так, чтобы при неправильном вводе он выводил сообщение о выходе из скрипта через три секунды, после трёх секунд ожидания осуществляется выход из скрипта. Модернизировать(№2) скрипт добавив в него возможность прекращения работы в меню.
Вариант решения Задачи №1
#!/bin/env bash
#trap 'echo -e "\e[31mВот фиг тебе, а не прерывание\e[0m!"' 1 2 3 5 9 15
PS3='Введите значение: ' && echo
while :
do
#clear
options=("1" "2")
#options=("1" "2" "Завершение работы скрипта") — для модернизации №2
select opt in "${options[@]}"; do
case "$opt" in
1) echo 'Ввели ' "$opt"
break 1
;;
2) echo 'Ввели ' "$opt"
break 1
;;
# Для модернизации №2:
#'Завершение работы скрипта')
# echo "Завершили работу скрипта"
# exit
;;
*) echo 'Ввели неверный символ'
echo 'Повторите ввод'
break 1
#echo "Прекращаем работу скрипта через 3 секунды и осуществляем выход" — для модернизации №1
#sleep 3; exit 0 — для модернизации №1
;;
esac
#break
done
done
Задача №2
Написать скрипт реализующий следующее:
- Создать функцию, которая реализует вывод списка директорий в файл /tmp/dir_list.log. При этом в качестве входного аргумента для функции служит переданный скрипту параметр, представляющий из себя абсолютный путь.
- Создать функцию, которая будет считывать содержимое /tmp/dir_list.log и выводить на экран, а также копировать это содержимое в /tmp/dir_list.0.
- Вызов функций происходит с задержкой в 5 секунд.
- После успешной отработки скрипта и выхода из него файлы /tmp/dir_list.log и /tmp/dir_list.0 должны быть автоматически удалены. Для этого пункта запрещается прямой вызов `rm -rf` или $(rm -rf) перед завершением скрипта.
Подсказки для задачи №2
find . -maxdepth 1 -type d -printf '%f\n' — выводит все директории
find . -maxdepth 1 -type d| sed 's|./*||' | sed '/^$/d' — выводит все директории
find . -maxdepth 1 -type d -printf '%f\n'|sed '1d' — выводит все директории, кроме первой(в ней размещается ".")
ls -l|grep 'drwx'| awk '{print $9}'
for i in *; do [ -d "$i" ] && echo "$i";done
ls -d */ | sed 's|\/||g'
find * -maxdepth 0 -type d
Вариант решения Задачи №2
#!/bin/env bash
_find_dir=$1
log="/tmp/dir_list.log"
log_0="/tmp/dir_list.0"
trap "rm -rf $log $log_0" EXIT
find_dir (){
find $_find_dir -maxdepth 1 -type d -printf '%f\n'|sed '1d' >> $log
#find $_find_dir -maxdepth 0 -type d >> $log
#ls -l $_find_dir|grep 'drwx'| awk '{print $9}'>> $log
#cd $_find_dir;for i in *; do [ -d "$i" ] && echo "$i";done >> $log
}
cp_list (){
cat $log|tee -a $log_0
}
find_dir
sleep 5
cp_list
exit 0
Задача №3
Написать скрипт, который передаёт всю полученную в ходе своей работы информацию в системный журнал:
- Дату и время в формате ГГГГ-ММ-ДД_ЧЧ-ММ-СС.
- Список зарегистрировавшихся в системе,на текущий момент, пользователей.
- Время работы системы(вывод должен быть представлен кириллицей).
В консоли продемонстрировать вывод верно работающего скрипта.
Вариант решения Задачи №3
#!/bin/env bash
reg_u=$(who |awk {'print $1'})
xdate=$(date +%Y-%m-%d_%H-%M-%S)
upt=$(uptime -p |sed -e 's|up||g' -e 's|day.|дня(-ей)|' -e 's|hour.|час(-а,-ов)|' -e 's|minute.|минут(-ы)|')
upt_w=$(uptime -p |sed -e 's|up||g' -e 's|week.|недель(-я,-и)|' -e 's|day.|дня(-ь,-ей)|' \
-e 's|hour.|час(-а,-ов)|' -e's|minute.|минут(-ы)|')
log_sys(){
logger -i -t "Check Sys Params" Дата и время: $xdate \| Зарегистрированные в системе пользователи: $reg_u \
\| Время работы системы: $1
}
if [ $(uptime|awk {'print $3'}) -gt 7 ]; then log_sys $upt_w; else log_sys $upt_w; fi
log_sys
exit 0