我有一个shell脚本,它有两个变量,ip和mask。 变量ip包含ip地址。我事先不知道有多少。 变量掩码包含相应的网络掩码。
我想以下列格式打印出ip和相应的掩码: ip mask \ n ip mask ...
我该怎么做? 我希望脚本可以移植,但bash也可以。
echo "$ip"
echo "$mask"
# This is how I would like the output to look like:
printf "%s " `echo "$ip" | awk '{print $1}'` `echo "$mask" | awk '{print $1}'`
printf "\n"
printf "%s " `echo "$ip" | awk '{print $2}'` `echo "$mask" | awk '{print $2}'`
这给出了输出:
10.3.30.54 10.3.36.17 10.3.36.19 213.15.219.104
255.255.255.255 255.255.255.240 255.255.255.240 255.255.255.255
10.3.30.54 255.255.255.255
10.3.36.17 255.255.255.240
谢谢!
答案 0 :(得分:2)
在bash中,您可以使用数组来保存IP和掩码:
#! /bin/bash
ip='192.168.0.1 127.0.0.1 192.168.0.100'
mask='255.255.255.0 0.0.15.0 127.127.127.0'
ips=($ip)
masks=($mask)
for (( i=0 ; i<${#ips[@]} ; i++ )) ; do
echo ${ips[i]} ${masks[i]}
done
答案 1 :(得分:1)
你可以尝试:
awk -vm="$mask" -vip="$ip" 'BEGIN{n=split(m,a); split(ip,b); for (i=1; i<=n; i++) print b[i],a[i]}'
答案 2 :(得分:1)
注意:bash
具体。不适用于/bin/sh
使用paste
命令&amp; process substitution
:
$ paste <(printf "%s\n" $ip) <(printf "%s\n" $mask)
10.3.30.54 255.255.255.255
10.3.36.17 255.255.255.240
10.3.36.19 255.255.255.240
213.15.219.104 255.255.255.255
说明:
paste
命令:并排打印两个文件。 printf
使用"%s\n"
格式字符串将在每行上打印ips / mask。 process substitution
,这两个被视为来自文件输入。