linux调用shell脚本并传参数,Shell脚本调用mongo命令传递参数时注意引号和变量

我们用shell脚本来完成mongodb shard集群搭建的自动化过程,就涉及到登录到mongodb shell中完成一系列mongo命令。类似下面:

#!/bin/bash

...

mongo --port 27017 --eval "rs.initiate();cfg=rs.conf();cfg.members[0].host='172.17.0.207:27017';rs.reconfig(cfg);"

要注意 –eval 后接的参数中的单引号不能换成反斜杠加双引号,即不能是下面这样:

#!/bin/bash

...

mongo --port 27017 --eval "rs.initiate();cfg=rs.conf();cfg.members[0].host=\"172.17.0.207:27017\";rs.reconfig(cfg);"

我们会用变量ip_1来代替其中的172.17.0.207,那想当然就变成下面这样:

#!/bin/bash

...

ip_1=172.17.0.207

mongo --port 27017 --eval "rs.initiate();cfg=rs.conf();cfg.members[0].host='$ip_1:27017';rs.reconfig(cfg);"

这样是行不通的。 –eval的参数中不能直接出现变量。于是换成下面:

#!/bin/bash

...

ip_1=172.17.0.207

cmd="rs.initiate();cfg=rs.conf();cfg.members[0].host='$ip_1:27017';rs.reconfig(cfg);"

mongo --port 27017 --eval $cmd

还是不行,虽然感觉eval的参数已经变成cmd这个纯字符串了,但实际上并没有替换变量ip_1,所以我们需要这样:

#!/bin/bash

...

ip_1=172.17.0.207

cmd="rs.initiate();cfg=rs.conf();cfg.members[0].host='$ip_1:27017';rs.reconfig(cfg);"

newcmd=$cmd

mongo --port 27017 --eval $newcmd

进行一次过滤,才OK。

网上关于mongodb的资料较少,尤其运维和调试。这里将自己的一点小问题列出来,供大家参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值