Bash-task — различия между версиями

Материал из VAAL-WIKI
Перейти к: навигация, поиск
(bash-task_первое_задание)
 
м (Добавлена задача №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                        
+
#trap 'echo -e "\e[31mХер тебе, а не прерывание\e[0m!"' 1 2 3 5 9 15
PS3='Введите значение: ' && echo                                                            
+
PS3='Введите значение: ' && echo
 
                                                                                                
 
                                                                                                
while :                                                                                    
+
while :
do                                                                                          
+
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
 
                 ;;                                                                           
 
                 ;;                                                                           
                2) echo  'Ввели ' "$opt"                                                   
+
                 *) echo 'Ввели неверный символ'
                    break 1                                                                 
+
                     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
  • При вводе любого другого символа, выводит сообщение о неправильном вводе на экран и просит повторить ввод.

При неправильном вводе цикл бесконечен, т.е. продолжается пока не будет введён нужный символ, а затем снова выводится меню выбора. Модернизировать скрипт так, чтобы при неправильном вводе он выводил сообщение о выходе из скрипта через три секунды, после ожидание в три секунды и выход из скрипта.

Вариант решения Задачи №1

Задача №2

Написать скрипт реализующий следующее:

  • Создать функцию, которая реализует вывод списка директорий в файл /tmp/dir_list.log. При этом в качестве входного аргумента для функции служит переданный самому скрипту параметр, представляющий из себя абсолютный путь.
  • Создать функцию, которая будет считывать содержимое /tmp/dir_list.log и выводить на экран, а также копировать это содержимое в /tmp/dir_list.0.
  • Вызов функций происходит с задержкой в 5 секунд
  • После успешной отработки скрипта и выхода из него файлы /tmp/dir_list.log и /tmp/dir_list.0 должны быть автоматически удалены. Для этого пункта запрещается прямой вызов `rm -rf` перед завершением скрипта.

Вариант решения Задачи №2