尊敬的同事,
我正在寻找更好的bash方法/方法来创建一个符合我要求的循环,我有一个名为" ldaphost"它使用以下提供的syntex为主机分配IP地址。
示例:
$ ldaphost --insert "192.168.1.1 mytestvm1"
虽然我有以下for循环,这对我来说是一个现在的工作,而且看起来专家和更好的解决方案与bash或shell相同。
要求是:
我的IP范围从192.168.1.1
到192.168.1.254
,格式与mytestvm1
到mytestvm254
的主机名相同,我将添加到我的下面的脚本中
#!/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
答案 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命令行即可运行可能的。