【问题标题】:Bash for loop - change variable nameBash for 循环 - 更改变量名
【发布时间】:2016-05-02 10:53:23
【问题描述】:

我有一个 for 循环,它接受一个 CIDR,其中包含文件名的非法字符(“/”)。

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

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

download 参数后面是 more 命令的结果,即 CIDR (192.168.21.0/24)。

bash 有没有办法在循环运行时重命名变量? 我记得这几年在批处理文件中通过从 str 长度中减去,但这对我没有帮助,因为我只需要用“-”(或任何其他兼容的字符)替换“/”。

【问题讨论】:

  • 请注意,您可以为 Shodan 中的“net”过滤器提供多个子网,方法是用逗号分隔它们。比如你可以这样做:net:192.168.21.0/24,172.20.0.0/16,8.8.8.8

标签: linux bash for-loop


【解决方案1】:

您可以使用bash 参数扩展来做到这一点:

$ echo $var
192.168.21.0/24

$ echo "${var//\//-}"
192.168.21.0-24

因此,在您的命令中,只需在需要时使用"${i//\//-}",而无需更改$i 的原始值。如果要将变量i 设置为新值:

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

附带说明,使用while 循环从文件中读取行,而不是catmore 或兄弟,例如:

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

【讨论】:

    【解决方案2】:

    我自己解决了:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2014-04-15
      • 2019-10-08
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多