Разбор INI-файла конфигурации с использованием بش پوسته-کریپتا.
Образец INI-файла
Я буду использовать следующий файл конфигурации INI в следующих كارااخ. [19659
زمان بندی = 10
monitor_interval = 20
[database]
سرور = db.example.org
بندر = 3306
نام کاربری = dbuser
رمز عبور = dbpass
[monitor]
سرورها [] = www.example.org
سرورها [] = proxy.example.org
سرورها [] = cache.example.org
سرورها [] = bastion.example.org
Спарсить весь INI-файл
Прочитаем и проанализируем весь INI-файл.
#! / bin / bash
# پرونده ساده INI را بخوانید و تجزیه کنید
# دریافت بخش INI
ReadINISections ()
نام محلی محلی = "$ 1"
awk '{if ($ 1 ~ / ^ [/) section=tolower(gensub(/[(.+)] / ، "\ 1" ، 1 ، 1 $))؛ پیکربندی [section] = 1} End {برای (کلید در پیکربندی) key کلید چاپ}} '$ {نام پرونده
}
# دریافت / تنظیم تمام بخش های INI
GetINISections ()
نام محلی محلی = "$ 1"
بخش ها = "$ (خواندن $ نام پرونده)"
برای بخش در $ $؛ انجام دادن
array_name = "پیکربندی _ $ {بخش}"
اعلام کنید -g -A $ {array_name
انجام شده
eval $ (awk -F = '
if ($ 1 ~ / ^ [/)
section=tolower(gensub(/[(.+)] / ، "\ 1" ، 1 ، 1 $))
دیگری اگر (1 دلار! ~ / ^ $ / && $ 1!! / ^؛ /)
gsub (/ ^ [ t] + | [ t] + $ /، ""، 1 $)؛
gsub (/ [[]] /، ""، $ 1)؛
gsub (/ ^ [ t] + | [ t] + $ /، ""، 2 دلار)؛
if (پیکربندی [section][$1] == "")
پیکربندی [section][$1] = 2 دلار
دیگر
پیکربندی [section][$1] = پیکربندی [section][$1] "" 2 $}
}
پایان {
برای (بخش در پیکربندی)
برای (کلید در پیکربندی [section])
بخش "configuration_" را چاپ کنید "[""key""] = " "پیکربندی [section][key]" "؛"
} '$ {نام پرونده
)
}
اگر [ "$#" -eq "1" ] && [ -f "$1" ]؛ سپس
filename = "$ 1"
GetINISections "$ filename"
echo -n "شرح پیکربندی:"
اگر [ -n "${configuration_main["description"]} "]؛
echo "$ {configuration_main ["description"]}"
دیگر
پژواک "گمشده"
فی
پژواک
برای بخش در $ (ReadINISections "configuration.ini")؛ انجام دادن
پژواک "[${section}]"
برای کلید به $ (پیکربندی پیوند تنظیم $ $} [@] }) انجام دادن
echo -e "key {key $ = $ (eval echo $ {پیکربندی _ $ {بخش} [$key] ()" (دسترسی به آن با استفاده از $ (تنظیمات echo $ {پیکربندی _ $ {بخش} [$key] })) "
انجام شده
انجام شده
دیگر
تکرار "پرونده INI گم شده"
Вывод ќе выглядеть چنین.
$ parseini configuration.ini
توضیحات پیکربندی: پیکربندی نمونه
[database]
نام کاربری = dbuser (دسترسی به آن با استفاده از $ {configuration_database [username]})
سرور = db.example.org (با استفاده از $ {configuration_database [server] it به آن دسترسی پیدا کنید)
رمز عبور = dbpass (با استفاده از $ {configuration_database [password] it به آن دسترسی داشته باشید)
پورت = 3306 (با استفاده از $ {configuration_database [port] it به آن دسترسی داشته باشید)
[main]
توضیحات = پیکربندی نمونه (با استفاده از $ {configuration_main
Разбор INI-файла конфигурации с использованием Bash shell-скрипта. Образец INI-файла Я буду использовать следующий файл конфигурации INI в следующих примерах. [main] description = Sample configuration timeout = 10 monitoring_interval = 20 [database] server = db.example.org port = 3306 username = dbuser password =... access) به آن دسترسی داشته باشید
timeout = 10 (با استفاده از $ {configuration_main [timeout] it به آن دسترسی داشته باشید)
monitor_interval = 20 (با استفاده از $ {configuration_main [monitoring_interval] it به آن دسترسی داشته باشید)
[monitor]
servers = www.example.org proxy.example.org cache.example.org bastion.example.org (به آن دسترسی پیدا کنید با استفاده از $ {configuration_monitor [servers]})
Парсинг مجدداً در INI-файل
#! / bin / bash
# بخش خوانده شده و تجزیه شده در پرونده INI
# دریافت / تنظیم بخش INI
GetINISection ()
نام محلی محلی = "$ 1"
بخش محلی = "2 دلار"
array_name = "پیکربندی _ $ {بخش}"
اعلام کنید -g -A $ {array_name
eval $ (awk -v configuration_array = "$ {array_name}" ارزیابی کنید
-v اعضا = "بخش $"
-F = '
if ($ 1 ~ / ^ [/)
section=tolower(gensub(/[(.+)] / ، "\ 1" ، 1 ، 1 $))
دیگری اگر (1 دلار! ~ / ^ $ / && $ 1!! / ^؛ /)
gsub (/ ^ [ t] + | [ t] + $ /، ""، 1 $)؛
gsub (/ [[]] /، ""، $ 1)؛
gsub (/ ^ [ t] + | [ t] + $ /، ""، 2 دلار)؛
if (بخش == عضو) {
if (پیکربندی [section][$1] == "")
پیکربندی [section][$1] = 2 دلار
دیگر
پیکربندی [section][$1] = پیکربندی [section][$1] "" 2 $}
}
}
پایان {
برای (کلید در پیکربندی [members])
چاپ configuration_array "[""key""] = " "پیکربندی [members][key]" "؛"
} '$ {نام پرونده
)
}
if [ "$#" -eq "2" ] && [ -f "$1" ] && [ -n "$2" ]؛ سپس
filename = "$ 1"
بخش = "2 دلار"
GetINISection "$ filename" "$ $"
پژواک "[${section}]"
برای کلید به $ (پیکربندی پیوند تنظیم $ $} [@] }) انجام دادن
echo -e "key {key $ = $ (eval echo $ {پیکربندی _ $ {بخش} [$key] ()" (دسترسی به آن با استفاده از $ (تنظیمات echo $ {پیکربندی _ $ {بخش} [$key] })) "
انجام شده
دیگر
echo "پرونده INI یا بخش INI از دست رفته"
ووود می تواند به این ترتیب باشد.
$ parseinisection configuration.ini اصلی
[main]
توضیحات = پیکربندی نمونه (با استفاده از $ {configuration_main
Разбор INI-файла конфигурации с использованием Bash shell-скрипта. Образец INI-файла Я буду использовать следующий файл конфигурации INI в следующих примерах. [main] description = Sample configuration timeout = 10 monitoring_interval = 20 [database] server = db.example.org port = 3306 username = dbuser password =... access) به آن دسترسی داشته باشید
timeout = 10 (با استفاده از $ {configuration_main [timeout] it به آن دسترسی داشته باشید)
monitor_interval = 20 (دسترسی به آن با استفاده از $ {configuration_main [monitoring_interval] access)