Bash-task — различия между версиями
Материал из VAAL-WIKI
Vaal (обсуждение | вклад) (bash-task_первое_задание) |
Vaal (обсуждение | вклад) м (Добавлена задача №2) |
||
Строка 1: | Строка 1: | ||
+ | <p style="text-align:center"><span style="color:red">'''''Задача №1'''''</span></p> | ||
Используя цикл и оператор выбора написать скрипт, реализующий следующее: | Используя цикл и оператор выбора написать скрипт, реализующий следующее: | ||
* Выводит на экран меню с выбором, состоящим из двух пунктов "1)" "2)" | * Выводит на экран меню с выбором, состоящим из двух пунктов "1)" "2)" | ||
Строка 7: | Строка 8: | ||
Модернизировать скрипт так, чтобы при неправильном вводе он выводил сообщение о выходе из скрипта через три секунды, | Модернизировать скрипт так, чтобы при неправильном вводе он выводил сообщение о выходе из скрипта через три секунды, | ||
после ожидание в три секунды и выход из скрипта. | после ожидание в три секунды и выход из скрипта. | ||
− | + | <p style="text-align:center"> | |
<spoiler text="Вариант решения Задачи №1"><source lang="bash"> | <spoiler text="Вариант решения Задачи №1"><source lang="bash"> | ||
− | #!/bin/env bash | + | #!/bin/env bash |
− | + | #trap 'echo -e "\e[31mХер тебе, а не прерывание\e[0m!"' 1 2 3 5 9 15 | |
− | + | PS3='Введите значение: ' && echo | |
− | + | while : | |
− | + | do | |
− | #clear | + | #clear |
− | options=("1" "2") | + | options=("1" "2") |
− | select opt in "${options[@]}"; do | + | select opt in "${options[@]}"; do |
− | case "$opt" in | + | case "$opt" in |
− | 1) echo 'Ввели ' "$opt" | + | 1) echo 'Ввели ' "$opt" |
− | break 1 | + | break 1 |
+ | ;; | ||
+ | 2) echo 'Ввели ' "$opt" | ||
+ | break 1 | ||
;; | ;; | ||
− | + | *) echo 'Ввели неверный символ' | |
− | + | echo 'Повторите ввод' | |
− | + | break 1 | |
− | *) echo 'Ввели неверный символ' | + | #echo "Прекращаем работу скрипта через 3 секунды и осуществляем выход" |
− | echo 'Повторите ввод' | + | #sleep 3; exit 0 |
− | break 1 | + | ;; |
− | #echo "Прекращаем работу скрипта через 3 секунды и осуществляем выход" | + | esac |
− | #sleep 3; exit 0 | + | #break |
− | ;; | + | done |
− | esac | + | done |
− | #break | + | </source> |
− | done | + | </spoiler> |
− | done | + | </p> |
+ | <p style="text-align:center"><span style="color:red">'''''Задача №2'''''</span></p> | ||
+ | Написать скрипт реализующий следующее: | ||
+ | * Создать функцию, которая реализует вывод списка директорий в файл /tmp/dir_list.log. При этом в качестве входного аргумента для функции служит переданный самому скрипту параметр, представляющий из себя абсолютный путь. | ||
+ | * Создать функцию, которая будет считывать содержимое /tmp/dir_list.log и выводить на экран, а также копировать это содержимое в /tmp/dir_list.0. | ||
+ | * Вызов функций происходит с задержкой в 5 секунд | ||
+ | * После успешной отработки скрипта и выхода из него файлы /tmp/dir_list.log и /tmp/dir_list.0 должны быть автоматически удалены. Для этого пункта запрещается прямой вызов `rm -rf` перед завершением скрипта. | ||
+ | <p style="text-align:center"> | ||
+ | <spoiler text="Вариант решения Задачи №2"><source lang="bash"> | ||
+ | #!/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 | ||
</source> | </source> | ||
</spoiler> | </spoiler> | ||
+ | </p> |
Версия 21:03, 19 февраля 2018
Задача №1
Используя цикл и оператор выбора написать скрипт, реализующий следующее:
- Выводит на экран меню с выбором, состоящим из двух пунктов "1)" "2)"
- При выборе "1)" выводит надпись на экран о выводе 1
- При выборе "2)" выводит надпись на экран о выводе 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` перед завершением скрипта.