循环一个变量并从其他变量打印

时间:2014-05-19 07:58:11

标签: shell loops sh

我有一个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

谢谢!

3 个答案:

答案 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

说明:

  1. paste命令:并排打印两个文件。
  2. printf使用"%s\n"格式字符串将在每行上打印ips / mask。
  3. 使用process substitution,这两个被视为来自文件输入。