我在bash中有以下变量: $ httpd_server_count,这个变量可以包含像1或2等的值。并且根据这个值,我需要在$ settings变量中获得适当的值。字符串是:
如果$ httpd_server_count = 1:
settings={'httpd1': {'server': 'settings.server1'},
如果$ httpd_server_count = 2:
settings={'httpd1': {'server': 'settings.server1'}, {'httpd2': {'server': 'settings.server2'},
并且计数可以达到10以上。如何在代码中正确组织它?
答案 0 :(得分:3)
我有点不清楚您需要什么,但似乎您想要读取httpd_server_count
的值并根据数字1, 2, whatever
生成所需的服务器字符串。如果我说得对,一种方法是使用基于for
的简单C风格httpd_server_count
循环。例如:
#!/bin/bash
str=
for ((i = 1; i <= $httpd_server_count; i++)); do
str="${str}{'httpd$i': {'server': 'settings.server$i'}, "
done
echo -e "str\n\n$str"
如果需要,您仍然有责任修剪跟踪,
并附加结束'}'
。但是,如果您httpd_server_count
的值为1
,那么您会得到:
{'httpd1': {'server': 'settings.server1'},
如果是2
,你会得到:
{'httpd1': {'server': 'settings.server1'}, {'httpd2': {'server': 'settings.server2'},
这可能会给你一个可以运行的想法。如果您有任何疑问,请告诉我。 (顺便说一句,json解析器通常是首选,如jq
)
答案 1 :(得分:3)
在bash
中使用功能,使代码更具便携性和效率。只需将代码放在如下所示的包装器中即可。逻辑类似于此David C. Rankin's answer,
function settingsGenerator() {
local httpd_server_count=$1
local i
local settings
for ((i=1; i<=httpd_server_count; i++))
do
settings="${settings}{'httpd$i': {'server': 'settings.server$i'}, "
done
printf "%s" "$settings"
}
并将函数的输出存储在变量settings
settings=$(settingsGenerator 2)
printf "%s\n" "$settings"
{'httpd1': {'server': 'settings.server1'},{'httpd2': {'server': 'settings.server2'},
使用数组需要进行一些小改动,例如
function settingsGenerator() {
local httpd_server_count=$1
local i
local settings=()
for ((i=1; i<=httpd_server_count; i++))
do
settings+="{httpd$i': {'server': 'settings.server$i'}, "
done
printf "%s" "${settings[@]}"
}
答案 2 :(得分:2)
用于循环:
#!/bin/bash
for i in `seq $httpd_server_count`; do
settings+="{'httpd$i': {'server': 'settings.server$i'}, "
done