在Bash scipt中打印特殊字符

时间:2016-04-08 04:05:23

标签: bash shell

我有一个bash脚本,它的一个功能是检查字符串的长度(密码)。密码必须包含特殊字符。我正在使用$ {#VAR}检查字符串是否合适,但正在解释特殊字符,因此计数已关闭。以下是有问题的代码:

userpass="$1"

if [[ "${#userpass}" -lt 8 ]]; then
     echo 'Short Password'
fi

像Q7cS $ ZpR8eSi和pNbTb $ IhkyUouDcZ这样的字符串将其绊倒(带有美元符号或符号的任何东西)。我也尝试使用wc -c,但我遇到了同样的问题

1 个答案:

答案 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