我有一个bash脚本,它的一个功能是检查字符串的长度(密码)。密码必须包含特殊字符。我正在使用$ {#VAR}检查字符串是否合适,但正在解释特殊字符,因此计数已关闭。以下是有问题的代码:
userpass="$1"
if [[ "${#userpass}" -lt 8 ]]; then
echo 'Short Password'
fi
像Q7cS $ ZpR8eSi和pNbTb $ IhkyUouDcZ这样的字符串将其绊倒(带有美元符号或符号的任何东西)。我也尝试使用wc -c
,但我遇到了同样的问题
答案 0 :(得分:0)
这不起作用:
./myPswdChkr.sh theirpa$sword
因为变量插值在参数传递给脚本之前发生。 myPswdChkr.sh
只收到theirpa
。
正如@shellter所说,如果用户在使用脚本时在他们的密码周围放置单引号,它会起作用:
./myPswdChkr.sh 'theirpa$sword'
。 。 。但实际上,这是一个糟糕的主意,因为那时他们的明文密码会被保存在命令历史中。
相反,只需运行不带参数的脚本
./myPswdChkr.sh
,然后提示用户输入脚本中的密码:
echo -n 'PlsEntrYrPswd: '
read userpass
if [[ "${#userpass}" -lt 8 ]]; then
echo 'Short Password'
fi