For循环迭代IP&主机名

时间:2017-02-10 15:00:18

标签: bash

尊敬的同事,

我正在寻找更好的bash方法/方法来创建一个符合我要求的循环,我有一个名为" ldaphost"它使用以下提供的syntex为主机分配IP地址。

示例:

$ ldaphost --insert  "192.168.1.1 mytestvm1"

虽然我有以下for循环,这对我来说是一个现在的工作,而且看起来专家和更好的解决方案与bash或shell相同。

要求是:

我的IP范围从192.168.1.1192.168.1.254,格式与mytestvm1mytestvm254的主机名相同,我将添加到我的下面的脚本中

#!/bin/bash

for ip in {1..254}
do
 ldaphost --insert "192.168.1.${ip} mytestvm${ip}"
done

如果我们可以将密码作为预先答案添加到脚本中,我想知道还有一件事,因为这是在每次迭代时都要求密码。

bash-4.1$ cat reservHost.sh
#!/bin/bash
for ((i = 13 i <= 15; i++)); do
     ldaphost --insert "1192.168.1.$i mytestvm$i"
done

bash-4.1$ ./reservHost.sh
Password:
Inserted: 192.168.1.13 mytestvm13
Password:
Inserted: 192.168.1.14 mytestvm14

1 个答案:

答案 0 :(得分:1)

你做得对,就是这样:支撑扩展和循环清晰,简洁,高效。

正如@chepner所指出的那样,使用C风格的结构可能会有更高效的循环:

<T#2,R#2>method(AF<T#2,R#2>)

您也可以选择使用for ((i = 1; i <= 254; i++)); do ldaphost --insert "192.168.1.$i mytestvm$i" done 代替循环:

xargs

xargs -a<(echo -n {1..254}) -INNN -d' ' -n1 ldaphost --insert "192.168.1.NNN mytestvmNNN" 优于xargs的好处是,此方法简单可并行化:只需将for添加到xargs命令行即可运行可能的。