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

gas*_*par 6 bash shell special-characters

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

./adduser_script username password
Run Code Online (Sandbox Code Playgroud)

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

/usr/sbin/useradd ... -p `openssl passwd -1 "$2"` ...
Run Code Online (Sandbox Code Playgroud)

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

/adduser_script username aa$@bbb
Run Code Online (Sandbox Code Playgroud)

脚本结束后,密码如下所示:aabbb(因此特殊字符将从原始密码中删除)。问题是如何正确地将带有特殊字符的原始密码传递给脚本?

预先感谢, 问候

Ami*_*mar 5

你尝试过强引用吗?

使用“aa$@bb”代替弱引用,即“aa$@bb”

例如:使用 echo 命令检查

echo "aa$@bb" will print aabb
Run Code Online (Sandbox Code Playgroud)

尽管

echo 'aa$@bb' will print aa$@bb
Run Code Online (Sandbox Code Playgroud)

在你的脚本中使用

/usr/sbin/useradd ... -p `openssl passwd -1 '$2'` ...
Run Code Online (Sandbox Code Playgroud)

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


Jac*_*era 2

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

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

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

./adduser_script username 'password$@aaa'
Run Code Online (Sandbox Code Playgroud)