1

検索を行いましたが、私がやろうとしていることとまったく同じものは見つかりませんでした。サーバーのホスト名と IP のリストがあります

  • サーベラ | IPa
  • サーバーb | IPb
  • サーバー | IPn

このファイルを cat し、各要素を変数に入れたい

  • Server_Var_1
  • IP_変数_1
  • Server_Var_2
  • IP_変数_2
  • Server_Var_n
  • IP_Var_n

私が現在持っているのは、次の KornShell (ksh) です。

Counter=0
cat hostfile|while read line; do
Server_Var_"$Counter"=echo $line | awk -F"|" '{print $1}'
IP_Var_"$Counter"=echo $line | awk -F"|" '{print $2}'
echo $Server_Var_[*] $IP_Var_[*]
done

どんな助けでも大歓迎です。

4

2 に答える 2

2
$ cat hostfile
server1 | 192.168.1.101
server2 | 192.168.1.102
server3 | 192.168.1.103
$ cat foo
#!/bin/sh

counter=0
while IFS=" |" read name ip; do
    eval Server_VAR_$counter=$name
    eval IP_VAR_$counter=$ip
    : $(( counter += 1 ))
done < hostfile

echo $Server_VAR_0:$IP_VAR_0
echo $Server_VAR_1:$IP_VAR_1
echo $Server_VAR_2:$IP_VAR_2
$ ./foo
server1:192.168.1.101
server2:192.168.1.102
server3:192.168.1.103
于 2012-09-06T06:12:08.847 に答える
1

これは、元の質問に少しひねりを加えたものです (@William Pursell によって完全に回答されました)。したがって、このコードは同じ出力を生成しますが、代わりに複合変数の配列を使用します。これは に固有のものであることに注意してくださいksh93

$ cat  read_hostvars

#!/bin/sh

counter=0
typeset -a Server
while IFS=" |" read name ip; do
    Server[counter].name=$name
    Server[counter].ip=$ip
    (( counter++ ))
done < hostfile

for n in ${!Server[@]}; do
    echo ${Server[n].name}:${Server[n].ip}
done
于 2012-09-07T08:16:29.160 に答える