我做了一次搜索,但没有发现任何与我想做的事情相似的事情。 我有一个服务器主机名列表& IP地址
我想捕获这个文件并将每个元素放入变量
我目前拥有的是以下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
感谢任何帮助。
答案 0 :(得分: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
答案 1 :(得分: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