【发布时间】:2014-07-15 21:40:35
【问题描述】:
我正在寻找一种解决方案来清理我的 bash 密码更改脚本中的变量。
下面的脚本正在运行,但是我发现一些“特殊字符”会破坏我的脚本。我目前无法控制正在传递的角色。我要么希望在传递变量之前对其进行清理,要么将变量作为一个整体保持不变。我尝试使用 '${PASS}' 代替 "${PASS}" 但是在这种情况下脚本不会完成。
如果有人能提供任何建议,我将不胜感激。在发布之前,我曾尝试搜索此问题的答案,但没有找到任何相关内容,因此如果在其他地方得到解答,我很抱歉。
#!/bin/bash
# Two variables are passed, Username and new Password.
USERNAME=$1
PASS=$2
expect << EOF
spawn passwd ${USERNAME}
expect "Enter new UNIX password:"
send "${PASS}\r"
expect "Retype new UNIX password:"
send "${PASS}\r"
expect eof;
EOF
expect << EOF
spawn htdigest /.passwd "Authenticated Users" ${USERNAME}
expect "New password:"
send "${PASS}\r"
expect "Re-type new password:"
send "${PASS}\r"
expect eof;
EOF
expect << EOF
spawn htpasswd /squiddb ${USERNAME}
expect "New password:"
send "${PASS}\r"
expect "Re-type new password:"
send "${PASS}\r"
expect eof;
EOF
提前感谢您!
【问题讨论】:
-
什么“特殊字符”? +1 使用
expect设置密码。我在Perl和Expect遇到了这个问题。 -
旁注:我一直使用
autoexpect生成的脚本并根据需要对其进行编辑。这种做法帮助我解决了许多问题,可能也像这样。 -
这里是 ${PASS} 特殊字符的极端情况示例:billy$@%^443&%&^fe!!
-
对我来说,我想使用
chpasswd在脚本中更改密码。你可以这样使用它:echo "$USERNAME:$PASS"|chpasswd。但我不确定它是否能解决特殊字符引起的问题。 -
您的意思是“特殊字符”不是正确的密码吗?或者确切的错误是什么?如果密码不能包含“特殊字符”,也许您可以在发送密码之前进行评估。