Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 循环一个变量并从另一个变量打印_Shell_Loops_Sh - Fatal编程技术网

Shell 循环一个变量并从另一个变量打印

Shell 循环一个变量并从另一个变量打印,shell,loops,sh,Shell,Loops,Sh,我有一个shell脚本,它有两个变量,ip和mask。 变量ip包含ip地址。我不知道事先有多少。 变量掩码包含相应的网络掩码 我想以以下格式打印ip和相应的掩码: ip掩码\n ip掩码 我该怎么做? 我希望脚本是可移植的,但是bash也可以 echo "$ip" echo "$mask" # This is how I would like the output to look like: printf "%s " `echo "$ip" | awk '{print $1}'` `ech

我有一个shell脚本,它有两个变量,ip和mask。 变量ip包含ip地址。我不知道事先有多少。 变量掩码包含相应的网络掩码

我想以以下格式打印ip和相应的掩码: ip掩码\n ip掩码

我该怎么做? 我希望脚本是可移植的,但是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
谢谢

您可以尝试:

awk -vm="$mask" -vip="$ip" 'BEGIN{n=split(m,a); split(ip,b); for (i=1; i<=n; i++) print b[i],a[i]}'
awk-vm=“$mask”-vip=“$ip””开始{n=split(m,a);split(ip,b);for(i=1;i您可以尝试:

awk -vm="$mask" -vip="$ip" 'BEGIN{n=split(m,a); split(ip,b); for (i=1; i<=n; i++) print b[i],a[i]}'

awk-vm=“$mask”-vip=“$ip””开始{n=split(m,a);split(ip,b);for(i=1;i注意:
bash
特定。不适用于
/bin/sh

使用命令&:


$paste注意:
bash
特定。不适用于
/bin/sh

使用命令&:


$paste在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
!/bin/bash
ip='192.168.0.1127.0.0.1192.168.0.100'
掩码='255.255.255.0 0.0.15.0 127.127.127.0'
ips=($ip)
掩码=($mask)

对于bash中的((i=0;i),可以使用数组来保存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
!/bin/bash
ip='192.168.0.1127.0.0.1192.168.0.100'
掩码='255.255.255.0 0.0.15.0 127.127.127.0'
ips=($ip)
掩码=($mask)

对于((i=0;i
paste
paste)这看起来是一个解决方案,但它给了我:意外标记附近的语法错误
(“
paste您使用的是
bash
还是
sh
?进程替换是bash的一项功能。我碰巧错过了所讨论的
sh
标记。感谢您的提示!我使用sh。这看起来是一个解决方案,但它给了我:意外标记附近的语法错误
(“
paste您使用的是
bash
还是
sh
?进程替换是bash的一项功能。&我碰巧错过了所讨论的
sh
标记。感谢您的提示!我使用了sh。尽管它看起来有点复杂,但仍然有效。谢谢!我相信它应该是n=split(vm,a)而不是n=split(m,a),对吗?@Tiago No,
-v
是传递给
awk
的选项,
m
是该选项的参数..因此
awk
接收变量
m=“$mask”
。这在我看来有点复杂。谢谢!我相信它应该是n=split(vm,a)而不是n=split(m,a),对吗?@Tiago No,
-v
是传递给
awk
的选项,
m
是该选项的参数。因此
awk
接收变量
m=“$mask”
。这是一个优雅的答案。唯一的缺点是数组不能移植到其他shell。这是一个优雅的答案。唯一的缺点是数组不能移植到其他shell。