3.66666666666671111111111Rating 3.67 (6 Votes)

Штатная ситуация - когда используются переменные в bash скрипте, обычно переменные указываются в начале тела скрипта, т.е. указываются основные вводные данные, которые необходимы для дальнейшей работы уже непосредственно в скрипте. Иногда встречаются ситуации, когда необходимо вынести основные переменные в отдельный config файл, с некоторых пор во многих проектах встречаются конфиги именно json формата, для удобной работы с json буду использовать утилиту jq (в CentOS / Fedora устанавливается из стандартных реп), ниже приведу краткий пример скрипта, пример, как установить jq в CentOS.

Установка jq в CentOS

Понадобится epel-release, для краткости приведу полный листинг:

yum install epel-release -y
yum install jq -y
jq --version

Использование json в bash при помощи jq

Допустим есть скрипт для создания PostgreSQL базы данных и пользователя для этой БД:

#!/bin/bash

su - postgres bash -c "psql -c \"CREATE DATABASE mydatabase WITH ENCODING 'UTF8';\""
su - postgres bash -c "psql -c \"CREATE USER dbuser WITH PASSWORD 'password';\""
su - postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE mydatabase TO dbuser;\""

Можно добавить переменные в сам скрипт с уже готовыми значениями, типа:

typeset -l DB_NAME
DB_NAME="mydatabase"
typeset -l DB_USER
DB_USER="dbuser"
DB_PASS="password"

Теперь представим ситуацию, когда нужно использовать имя БД в другом скрипте, в данном случае было бы удобнее использовать именно внешний конфиг, создаем db-config.json с нужными значениями:

{                                 
  "dbname": "mydatabase",
  "dbuser": "dbuser",
  "dbpass": "password" 
}

Далее этот файл необходимо подключить к своему скрипту:

file='db-config.json'

Использовать параметры конфига для своих переменных:

DB_NAME="$(jq -r '.dbname' "$file")"
DB_USER="$(jq -r '.dbuser' "$file")"
DB_PASS="$(jq -r '.dbpass' "$file")"

Использовать переменные в логике создания БД:

su - postgres bash -c "psql -c \"CREATE DATABASE ${DB_NAME} WITH ENCODING 'UTF8';;\""
su - postgres bash -c "psql -c \"CREATE USER ${DB_USER} WITH PASSWORD '${DB_PASS}';\""
su - postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};\""

Теперь этот конфиг можно подключать к другим скриптам, например к скрипту, который изменяет пароль пользователя БД или дропает базу...

Как пример, приведу полный код, с выводом в echo значений переменных:

#!/bin/bash

# Include config
file='db-config.json'

# DB settings
DB_NAME="$(jq -r '.dbname' "$file")"
DB_USER="$(jq -r '.dbuser' "$file")"
DB_PASS="$(jq -r '.dbpass' "$file")"

# Show value from variables
echo $DB_NAME, $DB_USER, $DB_PASS

Запускаем скрипт, смотрим результат:

$ bash db.sh 
mydatabase, dbuser, password

Добавить комментарий


Защитный код
Обновить

Сейчас 270 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз