📜  Bash 脚本 – Bash 读取密码而不回显

📅  最后修改于: 2022-05-13 01:57:31.418000             🧑  作者: Mango

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

输出 :

输出:读取带星号 (*) 的密码

在这里,我们可以清楚地看到,上面的脚本将读取用户名以及带有星号(*)的密码