根据另一个变量将字符串值添加到变量

时间:2017-01-09 08:53:26

标签: bash shell if-statement

我在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以上。如何在代码中正确组织它?

3 个答案:

答案 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
相关问题