将特殊字符从输入传递给bash脚本

时间:2014-05-21 09:52:50

标签: bash shell special-characters

我有一个bash脚本,只需添加新用户并签署调用脚本时传递的密码:

./adduser_script username password

然后将密码用作脚本中的参数,如下所示:

/usr/sbin/useradd ... -p `openssl passwd -1 "$2"` ...

当密码包含特殊字符(如$ @,$ * itd)时,会出现问题。所以当我调用脚本时:

/adduser_script username aa$@bbb

并且在脚本结束后密码看起来像:aabbb(因此特殊字符将从原始密码中删除)。问题是如何正确地将特殊字符串的原始密码传递给脚本?

提前致谢, 此致

4 个答案:

答案 0 :(得分:3)

你试过强烈的qoutes吗?

使用' aa $ @ bb'而不是弱qoutes,即" aa $ @ bb"

例如:使用echo命令检查

echo "aa$@bb" will print aabb

,而

echo 'aa$@bb' will print aa$@bb

在您的脚本中使用

/usr/sbin/useradd ... -p `openssl passwd -1 '$2'` ...

现在,在将密码作为参数传递时,您无需担心qoutes。

答案 1 :(得分:1)

问题可能根本不在您的脚本中,而在于您如何调用它。至少从你提供的代码片段来看,似乎没有评估密码字段。

因此,当您调用脚本时,如果参数包含类似$ a的内容,bash会将其替换为变量a的值,如果未设置则替换为空字符串。

如果$需要在密码中,则需要使用单引号。

./adduser_script username 'password$@aaa'

答案 2 :(得分:0)

您还可以使用带引号的双引号。 例如:设置密码" MyComplexP \ @ \ $ \ $ word"

答案 3 :(得分:-1)

/usr/sbin/useradd ... -p "$(openssl passwd -1 '$2')"