You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu环境下Linux Shell脚本如何实现密码输入星号隐藏效果?

Linux Shell脚本实现密码输入隐藏/星号显示方案

完全可以实现该需求,以下是两种常用实现方案:

方案1:最简无回显模式(原生read支持)

直接使用read命令自带的-s(静默模式)参数即可关闭输入回显,搭配-p参数可以直接输出提示文本,无需单独编写echo语句。修改后的代码如下:

#!/bin/bash
read -s -p "Enter Password:" p
echo "" # 输入完成后换行,避免后续输出和提示行在同一行

if [ "$p" = "Passwords" ]
then
    echo "Password Granted"
else
    echo "Password Denied"
fi

这个方案是Linux系统下密码输入的默认交互逻辑,比如sudo输密码时就是无回显效果,兼容性最好,几乎所有shell环境都支持。

方案2:输入字符显示为*(匹配网站登录交互效果)

如果需要输入时显示星号,需要手动编写逐字符读取的逻辑,核心是通过stty命令关闭终端回显,逐位读取输入字符,每读取一个有效字符就输出一个*,同时兼容退格删除操作。完整代码如下:

#!/bin/bash
# 先保存终端原有设置,提前配置无论脚本是否退出都恢复终端回显,避免终端故障
old_stty=$(stty -g)
trap 'stty "$old_stty"' EXIT

echo -n "Enter Password:"
p=""
# 关闭回显,逐字符读取输入
stty -echo
while IFS= read -r -n1 c; do
    # 检测到回车则结束输入
    if [ "$c" = $'\n' ]; then
        break
    fi
    # 检测退格/删除按键
    if [ "$c" = $'\177' ] || [ "$c" = $'\b' ]; then
        # 已有输入字符时才执行删除
        if [ -n "$p" ]; then
            # 删除最后一个字符
            p=${p%?}
            # 退格、擦除星号、再退格实现界面上的删除效果
            echo -ne "\b \b"
        fi
    else
        # 普通字符追加到密码变量,输出一个星号
        p+="$c"
        echo -n "*"
    fi
done
# 恢复终端回显(trap已经兜底,这里可以主动恢复)
stty "$old_stty"
echo ""

if [ "$p" = "Passwords" ]
then
    echo "Password Granted"
else
    echo "Password Denied"
fi

注意事项

  • 所有操作终端回显的脚本,必须配置异常退出时的回显恢复逻辑,否则脚本意外中断后终端会出现输入无显示的问题,上述示例中用trap捕获EXIT信号实现了兜底处理。
  • 字符串比对时变量建议用双引号包裹,避免输入为空时触发语法报错。

内容的提问来源于stack exchange,提问作者Dreac Leoson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:24:00