[转帖]Linux平台shell脚本输入密码,不显示明文
需求:shell脚本中输入密码,要求不显示明文,需要将其转换为“*”星号,或者不显示
实现方案:有两种实现方案,一是通过stty命令来实现,二是直接使用read来实现
方案一:使用stty来实现
使用stty -echo可以实现不显示密码,就像登录Linux系统输入密码时一样,stty的代码如下:
-
#!/bin/bash
-
-
stty -echo # 不显示用户输入
-
read -p "请输入密码:" pwdstr
-
stty echo # 恢复显示用户输入
-
echo
-
-
echo "pwdstr:$pwdstr"
结果如下:

方案二:read实现方案
使用read -n 1 -s -p "" str可实现单字符输入,这样便于将输入字符转为“*”星号,代码如下
-
echo -e "请输入密码: \c"
-
pwdstr=''
-
while : ;
-
do
-
read -n 1 -s -p "" pw
-
if [ $pw ]; then
-
pwdstr=${pwdstr}$pw
-
echo -e "*\c" # 如果不需要显示,把这条命令删掉即可
-
else
-
echo
-
break
-
fi
-
done
-
-
echo "password is :$pwdstr"
结果如下:

总结:如果不显示密码,推荐使用方案一(stty),更方便,如果需要将密码转成“*”星号,则推荐使用方案二(read)
例子:下边是一个使用方案二(read)获取密码的完整例子,可参考
-
#!/bin/bash
-
-
# 输入的密码,每次用完该变量需要将其置为空
-
INPUTEDPWD=''
-
-
function getPwd() {
-
-
pwdPrompt="请输入${1}密码: "
-
confirmPwdPrompt="请再次输入${1}密码: "
-
-
# 输入密码的函数
-
function inputPwd() {
-
pwdstr=''
-
while : ;
-
do
-
read -n 1 -s -p "" pw
-
if [ $pw ]; then
-
pwdstr=${pwdstr}$pw
-
echo -e "*\c"
-
else
-
echo
-
break
-
fi
-
done
-
}
-
-
# 第一次输入密码
-
echo -e "${pwdPrompt}\c"
-
inputPwd
-
if [ ! $pwdstr ]; then
-
echo "密码不能为空"
-
return
-
fi
-
password1=$pwdstr
-
-
# 第二次输入密码
-
echo -e "${confirmPwdPrompt}\c"
-
inputPwd
-
password2=$pwdstr
-
-
# 两次密码进行比较
-
if [ "$password1" != "$password2" ]; then
-
echo "密码不一致"
-
return
-
fi
-
-
# 将正确的密码赋值给INPUTEDPWD
-
INPUTEDPWD=$password2
-
-
}
-
-
# 调用获取密码的函数
-
getPwd "管理员admin的"
-
-
# 从INPUTEDPWD中取密码
-
validpwd=$INPUTEDPWD
-
INPUTEDPWD=''
-
-
# 若密码不为空,说明密码获取成功,否则为失败
-
if [ $validpwd ]; then
-
echo "validpwd: $validpwd"
-
else
-
exit 1
-
fi
[转帖]Linux平台shell脚本输入密码,不显示明文的更多相关文章
- Linux常用Shell脚本珍藏【转载】
我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 使用C#给Linux写Shell脚本(下篇)
在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...
- Linux/Unix shell 脚本中调用SQL,RMAN脚本
Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...
- 从windows到linux的shell脚本编码和格式问题
从windows到linux的shell脚本编码和格式问题 从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...
- Linux执行shell脚本方式及区别&命令后台运行
Linux执行shell脚本方式及区别&命令后台运行 http://blog.csdn.net/heqiyu34/article/details/19089951/
- Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间
Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...
- Linux:从windows到linux的shell脚本编码和格式
从windows到linux的shell脚本编码和格式问题 异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误, ...
- 【转】shell脚本中echo显示内容带颜色
shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下: echo -e "\033[41;36m something here \033[0m&qu ...
- shell脚本中echo显示内容带颜色
转自:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要 ...
随机推荐
- 教你几个部署多个nginx-ingress的注意事项
本文分享自华为云社区<nginx-ingress工作原理以及多nginx-ingress部署注意事项>,作者: 可以交个朋友. 一.nginx-ingress工作原理 nginx-ingr ...
- iOS上架审核宝典:如何避免被拒一次提交成功
Xcode 摘要:本文整理了iOS上架需要注意的事项,以帮助从事iOS开发和App运营的朋友们避免审核被拒的困扰.通过遵循这些指南,我们可以在一次提交中成功地将应用上架,并节省宝贵的时间和精力. 引言 ...
- 火山引擎工具技术分享:用 AI 完成数据挖掘,零门槛完成 SQL 撰写
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 文 / DataWind 团队封声 在使用 BI 工具的时候,经常遇到的问题是:"不会 SQL 怎么生产加工 ...
- Solon Aop 特色开发(5)切面与环绕拦截
Solon,更小.更快.更自由!本系列专门介绍Solon Aop方面的特色: <Solon Aop 特色开发(1)注入或手动获取配置> <Solon Aop 特色开发(2)注入或手动 ...
- Feign 接口独立项目
Feign 接口独立项目,报下列错误,原因是缺少指定扫描包 [2021-05-11 22:40:07.676] [main] [WARN ] o.s.b.w.s.c.AnnotationConfigS ...
- SpringBoot Kafka SSL接入点PLAIN机制收发消息
applycation.yml spring: # https://developer.aliyun.com/article/784990 kafka: bootstrap-servers: XXXX ...
- 跟着老猫来搞GO,系好安全带,准备发车!
为什么想要开篇这么一个系列博客主题? 我想有很多小伙伴想要问我这个,其实主要有以下几个原因. 在粉丝面前丢脸了 之前写过几篇关于java分布式系统的一些坑,然后就有小伙伴挺崇拜的,认为老猫啥都会,甚至 ...
- 【Go】函数高级 包的使用 gin框架入门 if-else 循环 switch 数组
目录 昨日回顾 今日内容 1 函数高级 2 包的使用 3 gin框架使用 4 if-else 5 循环 6 switch 7 数组 昨日回顾 # 1 go 基础数据类型 -数字:整数,正整数,浮点数, ...
- 阿里云视频云人脸生成领域最新研究成果入选CVPR2022
CVPR(IEEE Conference on Computer Vision and Pattern Recognition)作为计算机视觉和模式识别领域的顶级会议,在全球具有极高的权威性.目前在中 ...
- hyper-v虚拟机中ubuntu连不上网络的解决办法
首先重启下hyper-v的服务,看下情况: 1.检查hyper-v相关的服务有没有开启 2.如果开启了服务,unbuntu仍然不能连网,则在ubtuntu中进行接下来的步骤: 2.1 设置网络连接为N ...