Bash 脚本 – Bash 读取密码而不回显
通常,您可以在登录页面上看到,每当我们输入密码时,它会显示点(•) 或星号(*) 而不是密码。他们这样做是为了保护我们的系统或帐户。在这种情况下,登录页面会读取密码,并且会显示一个点或星号来代替密码。在某些情况下,点或星号也可能不会出现,这意味着它不会显示任何内容来代替密码。
让我们看看如何在不回显的情况下读取密码
首先,使用以下命令创建一个名为“User.sh”的文件
$ touch User.sh
现在在文本编辑器中打开“User.sh”
$ nano User.sh
现在将以下 bash 脚本写入“User.sh”
#!/bin/bash
echo "Enter Username : "
# read username and echo username in terminal
read username
echo "Enter Password : "
# password is read in silent mode i.e. it will
# show nothing instead of password.
read -s password
echo
echo "Your password is read in silent mode."
注意:这里的“-s”用于读取密码,因为它会在静默模式下读取密码。
现在保存上面的 bash 脚本并按照命令运行“User.sh”
$ chmod +x ./User.sh
$ ./User.sh
输出 :
在这里,我们可以清楚地看到,上面的脚本会读取用户名和密码,但不会回显密码。
让我们看看如何用“*”读取密码
现在,使用以下命令创建一个名为“Password.sh”的文件
$ touch Password.sh
现在,在文本编辑器中打开“Password.sh”
$ nano Password.sh
现在将下面的 bash 脚本写入“Password.sh”
#!/bin/bash
password=""
echo "Enter Username : "
# it will read username
read username
pass_var="Enter Password :"
# this will take password letter by letter
while IFS= read -p "$pass_var" -r -s -n 1 letter
do
# if you press enter then the condition
# is true and it exit the loop
if [[ $letter == $'\0' ]]
then
break
fi
# the letter will store in password variable
password=password+"$letter"
# in place of password the asterisk (*)
# will printed
pass_var="*"
done
echo
echo "Your password is read with asterisk (*)."
注意:这里,
- IFS:用于分割单词或字符的内部字段分隔符
- -r:它将读取密码。
- -p:它将逐个回显输入的字符。
- -s:它将以静默模式读取密码。
- -n:它不打印尾随的换行符。
现在保存上面的 bash 脚本并通过以下命令运行“Password.sh”
$ chmod +x ./Password.sh
$ ./Password.sh
输出 :
在这里,我们可以清楚地看到,上面的脚本将读取用户名以及带有星号(*)的密码