Bash-task — различия между версиями
Материал из VAAL-WIKI
Vaal (обсуждение | вклад) м (bash_task_Обновление форматирования) |
Vaal (обсуждение | вклад) м (bash_task_Обновление) |
||
Строка 6: | Строка 6: | ||
* При вводе любого другого символа, выводит на экран сообщение о неправильном вводе и просит повторить ввод. | * При вводе любого другого символа, выводит на экран сообщение о неправильном вводе и просит повторить ввод. | ||
При неправильном вводе цикл бесконечен, т.е. продолжается пока не будет введён нужный символ, а затем снова выводится меню выбора. | При неправильном вводе цикл бесконечен, т.е. продолжается пока не будет введён нужный символ, а затем снова выводится меню выбора. | ||
− | '''Модернизировать''' скрипт так, чтобы при ''неправильном вводе'' он выводил сообщение о выходе из скрипта через ''три секунды'', после трёх секунд ожидания осуществляется выход из скрипта. | + | '''Модернизировать'''(№1) скрипт так, чтобы при ''неправильном вводе'' он выводил сообщение о выходе из скрипта через ''три секунды'', после трёх секунд ожидания осуществляется выход из скрипта. '''Модернизировать'''(№2) скрипт добавив в него возможность прекращения работы в меню. |
<p style="text-align:center"> | <p style="text-align:center"> | ||
<spoiler text="Вариант решения Задачи №1"><source lang="bash"> | <spoiler text="Вариант решения Задачи №1"><source lang="bash"> | ||
Строка 17: | Строка 17: | ||
#clear | #clear | ||
options=("1" "2") | options=("1" "2") | ||
+ | #options=("1" "2" "Завершение работы скрипта") — для модернизации №2 | ||
select opt in "${options[@]}"; do | select opt in "${options[@]}"; do | ||
case "$opt" in | case "$opt" in | ||
Строка 24: | Строка 25: | ||
2) echo 'Ввели ' "$opt" | 2) echo 'Ввели ' "$opt" | ||
break 1 | break 1 | ||
− | ;; | + | ;; |
+ | # Для модернизации №2: | ||
+ | #'Завершение работы скрипта') | ||
+ | # echo "Завершили работу скрипта" | ||
+ | # exit | ||
+ | ;; | ||
*) echo 'Ввели неверный символ' | *) echo 'Ввели неверный символ' | ||
echo 'Повторите ввод' | echo 'Повторите ввод' | ||
break 1 | break 1 | ||
− | #echo "Прекращаем работу скрипта через 3 секунды и осуществляем выход" | + | #echo "Прекращаем работу скрипта через 3 секунды и осуществляем выход" — для модернизации №1 |
− | #sleep 3; exit 0 | + | #sleep 3; exit 0 — для модернизации №1 |
;; | ;; | ||
esac | esac | ||
Строка 44: | Строка 50: | ||
* Вызов функций происходит с ''задержкой в 5 секунд''. | * Вызов функций происходит с ''задержкой в 5 секунд''. | ||
* После успешной отработки скрипта и выхода из него файлы '''/tmp/dir_list.log''' и '''/tmp/dir_list.0''' должны быть автоматически удалены. Для этого пункта '''запрещается''' прямой вызов ''`rm -rf`'' или ''$(rm -rf)'' перед завершением скрипта. | * После успешной отработки скрипта и выхода из него файлы '''/tmp/dir_list.log''' и '''/tmp/dir_list.0''' должны быть автоматически удалены. Для этого пункта '''запрещается''' прямой вызов ''`rm -rf`'' или ''$(rm -rf)'' перед завершением скрипта. | ||
+ | <spoiler text="Подсказки для задачи №2"><source lang="bash"> | ||
+ | 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 | ||
+ | </spoiler> | ||
<p style="text-align:center"> | <p style="text-align:center"> | ||
<spoiler text="Вариант решения Задачи №2"><source lang="bash"> | <spoiler text="Вариант решения Задачи №2"><source lang="bash"> | ||
Строка 68: | Строка 83: | ||
cp_list | cp_list | ||
exit 0 | exit 0 | ||
+ | </source> | ||
+ | </spoiler> | ||
+ | </p> | ||
+ | <p style="text-align:center"><span style="color:red">'''''Задача №3'''''</span></p> | ||
+ | '''Написать скрипт, который передаёт всю полученную в ходе своей работы информацию в системный журнал''': | ||
+ | * ''Дату и время'' в формате ''ГГГГ-ММ-ДД_ЧЧ-ММ-СС''. | ||
+ | * ''Список'' зарегистрировавшихся в системе,на ''текущий момент'', пользователей. | ||
+ | * ''Время'' работы системы(вывод должен быть представлен ''кириллицей''). | ||
+ | В консоли продемонстрировать вывод верно работающего скрипта. | ||
+ | <p style="text-align:center"> | ||
+ | <spoiler text="Вариант решения Задачи №3"><source lang="bash"> | ||
+ | #!/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 | ||
</source> | </source> | ||
</spoiler> | </spoiler> | ||
</p> | </p> |
Версия 09:14, 20 февраля 2018
Задача №1
Используя цикл и оператор выбора написать скрипт, реализующий следующее:
- Выводит на экран(в терминал) меню с выбором, состоящим из двух пунктов "1)" "2)"
- При выборе "1)" выводит текст на экран(в терминал), содержащий только цифру 1
- При выборе "2)" выводит текст на экран(в терминал), содержащий только цифру 2
- При вводе любого другого символа, выводит на экран сообщение о неправильном вводе и просит повторить ввод.
При неправильном вводе цикл бесконечен, т.е. продолжается пока не будет введён нужный символ, а затем снова выводится меню выбора. Модернизировать(№1) скрипт так, чтобы при неправильном вводе он выводил сообщение о выходе из скрипта через три секунды, после трёх секунд ожидания осуществляется выход из скрипта. Модернизировать(№2) скрипт добавив в него возможность прекращения работы в меню.
Задача №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) перед завершением скрипта.
Задача №3
Написать скрипт, который передаёт всю полученную в ходе своей работы информацию в системный журнал:
- Дату и время в формате ГГГГ-ММ-ДД_ЧЧ-ММ-СС.
- Список зарегистрировавшихся в системе,на текущий момент, пользователей.
- Время работы системы(вывод должен быть представлен кириллицей).
В консоли продемонстрировать вывод верно работающего скрипта.