2016-05-02 146 views
1

我有一个for循环,其中包含一个非法字符的文件名称(“/”)的CIDR。Bash循环 - 更改变量名称

命令的一部分是用CIDR的名称保存输出。

for i in $(more subnets.lst);do shodan download $i-shodan net:$i;done 

下载参数后跟more命令的结果,即CIDR(192.168.21.0/24)。

在循环运行时,bash中有一种方法可以重命名变量吗? 我记得今年通过从str长度减去批处理文件,但这不会帮助我,因为我只需要用“ - ”替换“/”(或任何其他符合字符的文件。)

+0

请注意,您可以通过用逗号分隔多个子网到Shodan中的“net”过滤器。例如,你可以这样做: net:192.168.21.0/24,172.20.0.0/16,8.8.8.8 – achillean

回答

7

为此,您可以使用bash参数扩展:

$ echo $var 
192.168.21.0/24 

$ echo "${var//\//-}" 
192.168.21.0-24 
在命令

所以,只要使用"${i//\//-}"每当需要在不改变原值。如果你想变i设置为新值:

i="${i//\//-}" 

在一个侧面说明,使用while循环从文件中读取行,不catmore或兄弟,如:

while IFS= read -r line; do ....; done 
0

我的工作了我自己:

for i in $(more subnets-test);do shodan download $(echo $i | tr "/" "-") net:$i;done