我有一个bash脚本,只需添加新用户并签署调用脚本时传递的密码:
./adduser_script username password
然后将密码用作脚本中的参数,如下所示:
/usr/sbin/useradd ... -p `openssl passwd -1 "$2"` ...
当密码包含特殊字符(如$ @,$ * itd)时,会出现问题。所以当我调用脚本时:
/adduser_script username aa$@bbb
并且在脚本结束后密码看起来像:aabbb(因此特殊字符将从原始密码中删除)。问题是如何正确地将特殊字符串的原始密码传递给脚本?
提前致谢, 此致
答案 0 :(得分:3)
使用' 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')"