Практическая работа: Модуль 11. Работа со сценариями bash
См. также Требования, правила и цели выполнения практической работы
Практические задания
Задание 1.
Создайте скрипт приветствие hello.sh.
Назначьте скрипт запускаемым и выполните.
Выполните приветствие через bash.
Задание 2.
Переменные: Генератор пароля часть 1.
В операционной системе Linux пароль можно сгенерировать с помощью утилиты pwgen, но мы в учебных целях напишем скрипт, который способен решить эту задачу.
Создайте переменную алфавита для генерации простого и сложного пароля:
Задайте переменную для цифр, которые будем использовать в простом пароле.
Задайте переменную для спец. символов, которые будут в сложном пароле.
Задайте переменную алфавита из символов верхнего регистра A-Z + нижнего a-z + цифр + спец. символы.
Выведите весь алфавит: ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz0123456789+-=_.~|!@#%^
Задание 3.
Циклы: Генератор пароля часть 2.
Вычислите в переменную количество символов в алфавите легкого пароля алфавит A-Z + a-z + 0-9.
Вычислите положение случайного символа для легкого пароля.
Вырежьте символ из алфавита по случайному положению.
Приклейте вырезанный символ к простому паролю.
Повторите действие в цикле, добавив 14 случайных символов c переменной пароля.
Выведите легкий пароль из 14 случайных символов.
Самостоятельно *
По аналогии сделайте вывод простого и сложного пароля.
Выведите список из 9 пар паролей (Простой-Сложный)
Задание 4.
Условия: инсталлятор с проверкой root прав.
Проверьте, является ли текущий пользователь суперпользователем root.
Если пользователь не является root, то выведите сообщение об ошибке и завершите работу скрипта.
Если пользователь root, то установите apt install -y git curl wget jq.
Задание 5.
Переменные из аргументов.
Создайте скрипт, который выводит аргументы из командной строки:
Выведите «Текущий файл сценария $0».
Выведите «Первый аргумент: $1».
Выведите «Второй аргумент: ${2}».
Выведите «Последний аргумент ${!#}».
Выведите «Все аргументы одной переменной $*».
Выведите в цикле «Все аргументы из переменной $@».
Задание 6.
Отладка скрипта. *
Запустите отладку скрипта args.sh через bash -x и посмотрите трассировку.
Установите vs code.
Установите расширение отладки vs code rogalmic.bash-debug.
Откройте в VS Code домашнюю папку со скриптом args.sh.
Настройте параметры запуска launch.json.
Откройте файл скрипта и поставьте точку остановки на 10 строке (Клавиша <F9>).
Запустите отладку <F5> скрипта args.sh через расширение bash debug.
Ответы на практические задания (пошаговые инструкции)
Задание 1.
Создайте скрипт приветствие hello.sh:
nano hello.sh
#!/bin/bash
echo "Привет, $USER!"
Назначьте скрипт запускаемым и выполните:
chmod +x hello.sh
./hello.sh
Выполните приветствие через bash:
bash hello.sh
Задание 2.
Переменные: Генератор пароля часть 1.
Создайте переменную алфавита для генерации простого и сложного пароля:
Задайте переменную для цифр, которые будем использовать в простом пароле.
Задайте переменную для спец. символов, которые будут в сложном пароле.
Задайте переменную алфавита из символов верхнего регистра A-Z + нижнего a-z + цифр + спец. символы.
Выведите весь алфавит: ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz0123456789+-=_.~|!@#%^
#!/bin/bash
# genpass.sh - генератор списка простых и сложных паролей
# объявим переменную для цифр, которые будем использовать в простом пароле
numbers="0123456789"
# объявим переменную для спец. символов, которые будут в сложном пароле
special='+-=\_.~|!@#%^'
# комбинируем алфавит для пароля из строк, используя $numbers и $special
alphabet="ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz${numbers}${special}"
# обратимся к переменной по имени и выведем результат
echo "${alphabet}"
Задание 3.
Циклы: Генератор пароля часть 2.
Вычислите в переменную количество символов в алфавите легкого пароля алфавит A-Z + a-z + 0-9.
Вычислите положение случайного символа для легкого пароля.
Вырежьте символ из алфавита по случайному положению.
Приклейте вырезанный символ к простому паролю.
Повторите действие в цикле, добавив 14 случайных символов c переменной пароля.
Выведите легкий пароль из 14 случайных символов.
Решение с простым паролем.
#!/bin/bash
# genpass.sh - генератор списка простых и сложных паролей
# зададим переменную для цифр, которые будем использовать в простом пароле
numbers="0123456789"
# зададим переменную для спец. символов, которые будут в сложном пароле
special='+-=\_.~|!@#%^'
# комбинируем алфавит для пароля из строк, используя $numbers и $special
alphabet="ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz${numbers}${special}"
# обратимся к переменной по имени и выведем результат# echo
"${alphabet}"
# посчитаем количество символов для простого пароля
simple_count="$((${#alphabet}-${#special}))"
# очистим переменную простого пароля
unset pass_simple
# создадим простой пароль в цикле из 14 итераций
for s in $(seq 1 14); do
# возьмем случайную позицию символа для простого пароля
random_position="$((RANDOM % simple_count))"
# добавим к паролю новый случайный символ
pass_simple="${pass_simple}${alphabet:random_position:1}"
done
# выведем простой пароль
echo "${pass_simple}"
Самостоятельно *
По аналогии сделайте вывод простого и сложного пароля. cZCn7z79ClrkSW ^PjO9!pX4m%#reEGf|Qx2KR3
Выведите список из 9 пар паролей:
1 cZCn7z79ClrkSW ^PjO9!pX4m%#reEGf|Qx2KR3
2 N39apYC1C4O0Ga ufFeKrouP43xUefJ.zX.Q%jV
3 e3DnEG8C9PkjkX Zbsk0B@SkM|7@O#RNSOKQM^B
4 Zw6FKpEKN0Zs7O Wc1+R~XGo8DkP#6Rkw0AQ2%6
5 LcBPWZ08sAYOg3 ^BoE~egaFf-SrP0Cn@m_1=9G
6 UfFwYG5vazQ0BR q#Po!J|yMoWQBS=3b%^ur@p\
7 TfRcADRfaNgR7J a+WwPZ#kY.Ez_kUL@LZXr=gU
8 ApmZp4ZG0mkEs0 Ov6|+JdN6hh4_dK86ZLRP5_o
9 RhZruKEpRe3OOc oc39o=ck|mVS63_asGZqtgbX
Задание 4.
Условия: инсталлятор с проверкой root прав.
Проверьте, является ли текущий пользователь суперпользователем root.
Если пользователь не является root, то выведите сообщение об ошибке и завершите работу скрипта.
Если пользователь root, то установите apt install -y git curl wget jq.
Решение
#!/bin/bash
echo "Установка необходимых пакетов"
if [[ "$UID" -eq 0 ]]; then
echo "- Текущий пользователь root"
else
echo "- Для запуска установки требуются root права"
exit 99
fi
# выполняем установку необходимых пакетов для работы
apt install -y git curl wget jq
Задание 5.
Переменные из аргументов.
Создайте скрипт, который выводит аргументы из командной строки:
Выведите «Текущий файл сценария $0».
Выведите «Первый аргумент: $1».
Выведите «Второй аргумент: ${2}».
Выведите «Последний аргумент ${!#}».
Выведите «Все аргументы одной переменной $*».
Выведите в цикле «Все аргументы из переменной $@».
Запустите скрипт с разными аргументами:
./args.sh первый второй --test "/some/file.txt"
Решение
#!/bin/bash
# Скрипт переменные из аргументов
# Запуск ./args.sh первый второй --test "/some/file.txt"
echo "Файл сценария: $0"
echo "Первый аргумент: $1"
echo "Второй аргумент: ${2}"
echo 'Последний аргумент $!#:' "${!#}"
echo "Все аргументы одной переменной \\$\*: $\*"
count=0
echo "Все аргументы для перебора \\$@:"
for param in "$@"; do
count=$(( count + 1 ))
echo "Параметр ${count}: ${param}"
done
Задание 6.
Отладка скрипта.
Запустите отладку скрипта args.sh через bash -x и посмотрите трассировку.
Установите vs code.
Установите расширение отладки vs code rogalmic.bash-debug.
Откройте в VS Code домашнюю папку со скриптом args.sh.
Настройте параметры запуска launch.json.
Откройте файл скрипта и поставьте точку остановки на 10 строке (Клавиша <F9>).
Запустите отладку <F5> скрипта args.sh через расширение bash debug.