Shell-在shell中如何实现输入密码时只显示*号?

Shell-在shell中如何实现输入密码时只显示*号?

浮生未歇 发布于 2017-07-30 字数 75 浏览 1052 回复 2

我有一个shell脚本需要实现让用户输入密码时只显示*号,应该如何实现呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晚风撩人 2017-08-23 2 楼

最简单的做法,不显示密码:

#! /usr/bin/ksh

print -n "Enter password - "
stty -echo
read PASSWORD
stty echo
echo ""
print $PASSWORD

运行结果:密码输入 abc
[test@hdtest ~]$ ksh a.sh
Enter password -
abc

用*显示代替就比较复杂一点:

 #!/usr/bin/ksh
function savetty
{
SAVETTY=$(stty -g </dev/tty)
}
function hidestty
{
stty raw -echo </dev/tty
}
function resetstty
{
stty ${SAVETTY:-cooked} </dev/tty
stty echo </dev/tty
}
function getpass
{
typeset ans passwd cr=$(print -n "r") bs=$(print -n "b")
typeset vname=${1:-PASSWORD}
savetty
hidestty
ans=
passwd=
while :
do
ans=`dd if=/dev/tty count=1 bs=1 2>/dev/null`
case $ans in
$bs)
((${#passwd})) && {
print -n "b b"
passwd=${passwd%?}
}
;;
$cr)
break
;;
[[:print:]])
print -n '*'
passwd="${passwd}${ans}"
esac

done
eval $vname='$passwd'
}
getpass PASSWD
resetstty
echo ""
echo "$PASSWD"
read PASSWD
echo "$PASSWD"

运行结果:
输入密码 a
[test@hdtest ~]$ ksh b.sh
*
a
display
display

晚风撩人 2017-08-09 1 楼

输入‘d’结束

#!/bin/ksh
getchar()
{
stty raw
stty -echo
eval $1=`dd if=/dev/tty bs=1 count=1 2> /dev/null`
stty echo
stty cooked
}
clear
tput cup 15 10
echo -n "请输入密码:"
CURPOS=20
while true
do
CURPOS=`expr ${CURPOS} + 1`
getchar char
tput cup 15 ${CURPOS}
echo "*"
if [ "${char}" = "d" ]
then
break
else
PWDSTR=${PWDSTR}${char}
fi
done
echo "你输入的密码是: ${PWDSTR}"