Практическая работа: Модуль 11. Работа со сценариями bash

См. также Требования, правила и цели выполнения практической работы

Практические задания

Задание 1.

  1. Создайте скрипт приветствие hello.sh.

  2. Назначьте скрипт запускаемым и выполните.

  3. Выполните приветствие через bash.

Задание 2.

Переменные: Генератор пароля часть 1.

В операционной системе Linux пароль можно сгенерировать с помощью утилиты pwgen, но мы в учебных целях напишем скрипт, который способен решить эту задачу.

Создайте переменную алфавита для генерации простого и сложного пароля:

  1. Задайте переменную для цифр, которые будем использовать в простом пароле.

  2. Задайте переменную для спец. символов, которые будут в сложном пароле.

  3. Задайте переменную алфавита из символов верхнего регистра A-Z + нижнего a-z + цифр + спец. символы.

  4. Выведите весь алфавит: ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz0123456789+-=_.~|!@#%^

Задание 3.

Циклы: Генератор пароля часть 2.

  1. Вычислите в переменную количество символов в алфавите легкого пароля алфавит A-Z + a-z + 0-9.

  2. Вычислите положение случайного символа для легкого пароля.

  3. Вырежьте символ из алфавита по случайному положению.

  4. Приклейте вырезанный символ к простому паролю.

  5. Повторите действие в цикле, добавив 14 случайных символов c переменной пароля.

  6. Выведите легкий пароль из 14 случайных символов.

Самостоятельно *

  1. По аналогии сделайте вывод простого и сложного пароля.

  2. Выведите список из 9 пар паролей (Простой-Сложный)

Задание 4.

Условия: инсталлятор с проверкой root прав.

  1. Проверьте, является ли текущий пользователь суперпользователем root.

  2. Если пользователь не является root, то выведите сообщение об ошибке и завершите работу скрипта.

  3. Если пользователь root, то установите apt install -y git curl wget jq.

Задание 5.

Переменные из аргументов.

Создайте скрипт, который выводит аргументы из командной строки:

  1. Выведите «Текущий файл сценария $0».

  2. Выведите «Первый аргумент: $1».

  3. Выведите «Второй аргумент: ${2}».

  4. Выведите «Последний аргумент ${!#}».

  5. Выведите «Все аргументы одной переменной $*».

  6. Выведите в цикле «Все аргументы из переменной $@».

Задание 6.

Отладка скрипта. *

  1. Запустите отладку скрипта args.sh через bash -x и посмотрите трассировку.

  2. Установите vs code.

  3. Установите расширение отладки vs code rogalmic.bash-debug.

  4. Откройте в VS Code домашнюю папку со скриптом args.sh.

  5. Настройте параметры запуска launch.json.

  6. Откройте файл скрипта и поставьте точку остановки на 10 строке (Клавиша <F9>).

  7. Запустите отладку <F5> скрипта args.sh через расширение bash debug.

Ответы на практические задания (пошаговые инструкции)

Задание 1.

  1. Создайте скрипт приветствие hello.sh:

nano hello.sh
#!/bin/bash
echo "Привет, $USER!"
  1. Назначьте скрипт запускаемым и выполните:

chmod +x hello.sh
./hello.sh
  1. Выполните приветствие через bash:

bash hello.sh

Задание 2.

Переменные: Генератор пароля часть 1.

Создайте переменную алфавита для генерации простого и сложного пароля:

  1. Задайте переменную для цифр, которые будем использовать в простом пароле.

  2. Задайте переменную для спец. символов, которые будут в сложном пароле.

  3. Задайте переменную алфавита из символов верхнего регистра A-Z + нижнего a-z + цифр + спец. символы.

  4. Выведите весь алфавит: ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz0123456789+-=_.~|!@#%^

#!/bin/bash
# genpass.sh - генератор списка простых и сложных паролей

# объявим переменную для цифр, которые будем использовать в простом пароле
numbers="0123456789"

# объявим переменную для спец. символов, которые будут в сложном пароле
special='+-=\_.~|!@#%^'

# комбинируем алфавит для пароля из строк, используя $numbers и $special
alphabet="ABCDEFGJKLMNOPQRSTVUWXYZabcdefghjklmnopqrstvuwxyz${numbers}${special}"

# обратимся к переменной по имени и выведем результат
echo "${alphabet}"

Задание 3.

Циклы: Генератор пароля часть 2.

  1. Вычислите в переменную количество символов в алфавите легкого пароля алфавит A-Z + a-z + 0-9.

  2. Вычислите положение случайного символа для легкого пароля.

  3. Вырежьте символ из алфавита по случайному положению.

  4. Приклейте вырезанный символ к простому паролю.

  5. Повторите действие в цикле, добавив 14 случайных символов c переменной пароля.

  6. Выведите легкий пароль из 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}"

Самостоятельно *

  1. По аналогии сделайте вывод простого и сложного пароля. cZCn7z79ClrkSW ^PjO9!pX4m%#reEGf|Qx2KR3

  2. Выведите список из 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 прав.

  1. Проверьте, является ли текущий пользователь суперпользователем root.

  2. Если пользователь не является root, то выведите сообщение об ошибке и завершите работу скрипта.

  3. Если пользователь 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.

Переменные из аргументов.

Создайте скрипт, который выводит аргументы из командной строки:

  1. Выведите «Текущий файл сценария $0».

  2. Выведите «Первый аргумент: $1».

  3. Выведите «Второй аргумент: ${2}».

  4. Выведите «Последний аргумент ${!#}».

  5. Выведите «Все аргументы одной переменной $*».

  6. Выведите в цикле «Все аргументы из переменной $@».

Запустите скрипт с разными аргументами:

./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.

Отладка скрипта.

  1. Запустите отладку скрипта args.sh через bash -x и посмотрите трассировку.

  2. Установите vs code.

  3. Установите расширение отладки vs code rogalmic.bash-debug.

  4. Откройте в VS Code домашнюю папку со скриптом args.sh.

  5. Настройте параметры запуска launch.json.

  6. Откройте файл скрипта и поставьте точку остановки на 10 строке (Клавиша <F9>).

  7. Запустите отладку <F5> скрипта args.sh через расширение bash debug.