Shell 循环一个变量并从另一个变量打印
我有一个shell脚本,它有两个变量,ip和mask。 变量ip包含ip地址。我不知道事先有多少。 变量掩码包含相应的网络掩码 我想以以下格式打印ip和相应的掩码: ip掩码\n ip掩码 我该怎么做? 我希望脚本是可移植的,但是bash也可以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
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;ipastepaste)这看起来是一个解决方案,但它给了我:意外标记附近的语法错误(“
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。