###### tags: Linux, bash, Wireguard.
# Автоматизируйте работу с Wireguard.
Напишите скрипт который будет создавать клиентские конфиги
И так для начала определимся что должен делать скрипт.
Во первых желательно создавать папки для каждого клиента с файлом конфигурации и ключами, называть папки желательно по какому-то индификатору клиента, поэтому у нас уже есть один параметр который принимает скрипт: `$1` - имя или идентификатор клиента.
Скрипт должен создавать конфиги клиента, а также дописывать конфиг сервера. При этом для каждого клиента, после каждого использования скрипта должен назначаться не занятый IP адресс в VPN сети. Ну и после всех действий должны выполняться перезагрузка службы wg.
В конфиге сервера перед добавлением пира подписывайте коментом индификатор клиента из параметра `$1`

Скрипт для создания клиентов должен лежать в `/etc/wireguard/script` директории.
Напишите скрипт который разворачивает Wireguard сервер на Linux с нуля и протестируйте его.(PS:пожауйста не используйте уже готовые скрипты а напишите свой это полезная тренеровка.)
Данный скрипт должен принимать все неообходимые параметры для создания конфига из файла или при запуске программы.
Скрипт должен создавать два дополнительных каталога `client` и `script` в директории `/etc/wireguard` и в папку script закидывать ваш скрипт для создания конфигов клиента.
## Что нужно знать для выполнения задания.
Что нужно знать.
1. В сприте bash вы можете использовать все команды которые у вас работают в Linux.
2. Вы можете использовать переменные как и в любых языках программирования.
3. Вы можете использовать условия и циклы.
4. Вы можете создавать функции.
5. И тд.
### Bash.
Для начала, большинство необходимых вам команд вы можете взять из гайда: [Настройка Wireguard](https://hackmd.io/@erikguru/HkQWSI8Eo).
Используйте в начале файла со скриптом чтобы указать где лежит bash-интерпретатор.
```bash
#!/bin/bash
```
**Для создания переменных используйте четкие и понятные названия:**
```bash
privatekey_url="/etc/wireguard/privatekey"
```
Обратите внимание что между `=` нету пробелов.
Чтобы записать содержимое какого либо файла в переменную вы можете использовать следующию конструкцию:
```bash
privatekey=$(<$privatekey_url)
```
Для обращение к переменной и вставки ее значения в какую либо команду используйте знак `$`.
Чтобы записать какой либо текст в файл используйте операторы перенапрваления:
```bash
echo "#Пользователь: $1" >> wg0.conf
```
> Внимание используя `>` вы замените все содержимое файла на вставляемый текст, используя `>>` вы запишите текст в конец файла не удаляя его содержимого.
Обратите внимание на `$1` такая запись используеться для обращения к первому аргументу после запуска скрипта. К примеру командой: `script.sh erik` вы передадите в скрипт в переменную `1` значение erik. Соответсвтенно `$2 ` передадите 2 аргумент после запуска скрипта и тд.
Если вы не хотите чтобы скрипт выводил какие либо ошибки или либой другой ввывод после выполнения команды добавьте знак `&`
```bash
systemctl restart wg-quick@wg0 &
```
В таком случае команда выполниться в фоне.
Впринципе этого достаточно чтобы написать скрипт. В остольном гугл в помощь к примеру: [Руководство по написанию Bash скриптов](https://selectel.ru/blog/tutorials/linux-bash-scripting-guide/).