2016-12-22 1 views
1

私は、複数の構成squidファイルからポートを取り出してjsonファイルに配置する必要があります。squid.confファイルからポートを動的に取り出し、bashを使用してjsonファイルに入れます

echo -n "{ \"data\":" > test.json 
echo -n " [" >> test.json 

sqcur=0 
sqtotal=`ls /etc/squid?.conf | wc -l` 
tcp_ports=$(grep "port" /etc/squid?.conf |awk '{print $2}' |sed 's|.*[0-9]*\:||g'|sort|uniq|xargs) 

for squidconf in `ls /etc/squid?.conf`; do 
    let "sqcur+=1" > /dev/null 
    squidident=`echo $squidconf | sed 's/.*\///' | awk -F '.' '{print $1}'` 
    if [ $sqcur -lt $sqtotal ]; then 
    echo -n " { \"{#SQPROC}\": \"/usr/local/squid/bin/squid\", \"{#SQPROC_IDENT}\": \"${squidident}\", \"{#SQPROC_ARGS}\": \"-D -C -F -f ${squidconf}\", \"{#SQPROC_PORT}\": \"${tcp_ports}\", \"{#SQPROC_CONF}\": \"${squidconf}\" }," >> test.json 
    else 
    echo -n " { \"{#SQPROC}\": \"/usr/local/squid/bin/squid\", \"{#SQPROC_IDENT}\": \"${squidident}\", \"{#SQPROC_ARGS}\": \"-D -C -F -f ${squidconf}\", \"{#SQPROC_PORT}\": \"${tcp_ports}\", \"{#SQPROC_CONF}\": \"${squidconf}\" }" >> test.json 
    fi 
done 

echo -n " ]" >> test.json 
echo "}" >> test.json 

は、出力が次のようになります:

は、これまでのところ私は、次の方法で、次のことを行うことができました

{ 
    "data": [ 
     { 
      "{#SQPROC}": "/usr/local/squid/bin/squid", 
      "{#SQPROC_IDENT}": "squid1", 
      "{#SQPROC_ARGS}": "-D -C -F -f /etc/squid1.conf", 
      "{#SQPROC_PORT}": "1111 2222 3333 4444", 
      "{#SQPROC_CONF}": "/etc/squid1.conf" 
     }, 
     { 
      "{#SQPROC}": "/usr/local/squid/bin/squid", 
      "{#SQPROC_IDENT}": "squid2", 
      "{#SQPROC_ARGS}": "-D -C -F -f /etc/squid2.conf", 
      "{#SQPROC_PORT}": "1111 2222 3333 4444", 
      "{#SQPROC_CONF}": "/etc/squid2.conf" 
     }, 
     { 
      "{#SQPROC}": "/usr/local/squid/bin/squid", 
      "{#SQPROC_IDENT}": "squid3", 
      "{#SQPROC_ARGS}": "-D -C -F -f /etc/squid3.conf", 
      "{#SQPROC_PORT}": "1111 2222 3333 4444", 
      "{#SQPROC_CONF}": "/etc/squid3.conf" 
     } 
    ] 
} 

しかし、私は必要とする設定のそれぞれで定義されているポートファイルはjsonファイル内で定義されている設定ファイルだけに関連付けられます。

例:1111と2222はsquid1.confで定義されているので、JSONの出力は、次にする必要があります。

{ 
     "data": [ 
      { 
       "{#SQPROC}": "/usr/local/squid/bin/squid", 
       "{#SQPROC_IDENT}": "squid1", 
       "{#SQPROC_ARGS}": "-D -C -F -f /etc/squid1.conf", 
       "{#SQPROC_PORT}": "1111 2222", 
       "{#SQPROC_CONF}": "/etc/squid1.conf" 
      }, 

というように設定ファイルの残りの部分。

助けてもらえますか?あなたは、ループ内 をtcp_portsの定義を移動して、現在の設定ファイルでそれを実行することができます

答えて

1

for squidconf in `ls /etc/squid?.conf`; do 
    let "sqcur+=1" > /dev/null 
    squidident=`echo $squidconf | sed 's/.*\///' | awk -F '.' '{print $1}'` 
    tcp_ports=$(grep "port" $squidconf |awk '{print $2}' |sed 's|.*[0-9]*\:||g'|sort|uniq|xargs) 
    if [ $sqcur -lt $sqtotal ]; then 
    echo -n " { \"{#SQPROC}\": \"/usr/local/squid/bin/squid\", \"{#SQPROC_IDENT}\": \"${squidident}\", \"{#SQPROC_ARGS}\": \"-D -C -F -f ${squidconf}\", \"{#SQPROC_PORT}\": \"${tcp_ports}\", \"{#SQPROC_CONF}\": \"${squidconf}\" }," >> test.json 
    else 
    echo -n " { \"{#SQPROC}\": \"/usr/local/squid/bin/squid\", \"{#SQPROC_IDENT}\": \"${squidident}\", \"{#SQPROC_ARGS}\": \"-D -C -F -f ${squidconf}\", \"{#SQPROC_PORT}\": \"${tcp_ports}\", \"{#SQPROC_CONF}\": \"${squidconf}\" }" >> test.json 
    fi 
done 
+0

はどうもありがとう、私はスクリプトの中でそれを逃したそのビット愚か本当に思います。 – user54

関連する問題