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

Материал из VAAL-WIKI
Перейти к: навигация, поиск
м (bash_task_Обновление форматирования)
м (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) скрипт добавив в него возможность прекращения работы в меню.

Вариант решения Задачи №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` или $(rm -rf) перед завершением скрипта.

Подсказки для задачи №2

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

Задача №3

Написать скрипт, который передаёт всю полученную в ходе своей работы информацию в системный журнал:

  • Дату и время в формате ГГГГ-ММ-ДД_ЧЧ-ММ-СС.
  • Список зарегистрировавшихся в системе,на текущий момент, пользователей.
  • Время работы системы(вывод должен быть представлен кириллицей).

В консоли продемонстрировать вывод верно работающего скрипта.

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