需求:shell脚本中输入密码,要求不显示明文,需要将其转换为“*”星号,或者不显示

实现方案:有两种实现方案,一是通过stty命令来实现,二是直接使用read来实现

方案一:使用stty来实现

使用stty -echo可以实现不显示密码,就像登录Linux系统输入密码时一样,stty的代码如下:


  1. #!/bin/bash
  2. stty -echo # 不显示用户输入
  3. read -p "请输入密码:" pwdstr
  4. stty echo # 恢复显示用户输入
  5. echo
  6. echo "pwdstr:$pwdstr"

结果如下:

方案二:read实现方案

使用read -n 1 -s -p "" str可实现单字符输入,这样便于将输入字符转为“*”星号,代码如下


  1. echo -e "请输入密码: \c"
  2. pwdstr=''
  3. while : ;
  4. do
  5. read -n 1 -s -p "" pw
  6. if [ $pw ]; then
  7. pwdstr=${pwdstr}$pw
  8. echo -e "*\c" # 如果不需要显示,把这条命令删掉即可
  9. else
  10. echo
  11. break
  12. fi
  13. done
  14. echo "password is :$pwdstr"

结果如下:

总结:如果不显示密码,推荐使用方案一(stty),更方便,如果需要将密码转成“*”星号,则推荐使用方案二(read)

例子:下边是一个使用方案二(read)获取密码的完整例子,可参考


  1. #!/bin/bash
  2. # 输入的密码,每次用完该变量需要将其置为空
  3. INPUTEDPWD=''
  4. function getPwd() {
  5. pwdPrompt="请输入${1}密码: "
  6. confirmPwdPrompt="请再次输入${1}密码: "
  7. # 输入密码的函数
  8. function inputPwd() {
  9. pwdstr=''
  10. while : ;
  11. do
  12. read -n 1 -s -p "" pw
  13. if [ $pw ]; then
  14. pwdstr=${pwdstr}$pw
  15. echo -e "*\c"
  16. else
  17. echo
  18. break
  19. fi
  20. done
  21. }
  22. # 第一次输入密码
  23. echo -e "${pwdPrompt}\c"
  24. inputPwd
  25. if [ ! $pwdstr ]; then
  26. echo "密码不能为空"
  27. return
  28. fi
  29. password1=$pwdstr
  30. # 第二次输入密码
  31. echo -e "${confirmPwdPrompt}\c"
  32. inputPwd
  33. password2=$pwdstr
  34. # 两次密码进行比较
  35. if [ "$password1" != "$password2" ]; then
  36. echo "密码不一致"
  37. return
  38. fi
  39. # 将正确的密码赋值给INPUTEDPWD
  40. INPUTEDPWD=$password2
  41. }
  42. # 调用获取密码的函数
  43. getPwd "管理员admin的"
  44. # 从INPUTEDPWD中取密码
  45. validpwd=$INPUTEDPWD
  46. INPUTEDPWD=''
  47. # 若密码不为空,说明密码获取成功,否则为失败
  48. if [ $validpwd ]; then
  49. echo "validpwd: $validpwd"
  50. else
  51. exit 1
  52. fi
文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux32252 人正在系统学习中

[转帖]Linux平台shell脚本输入密码,不显示明文的更多相关文章

  1. Linux常用Shell脚本珍藏【转载】

    我们在运维中,尤其是linux运维,都知道脚本的重要性,脚本会让我们的 运维事半功倍,所以学会写脚本是我们每个linux运维必须学会的一门功课,这里收藏linux运维常用的脚本.如何学好脚本,最关键的 ...

  2. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  3. 使用C#给Linux写Shell脚本(下篇)

    在上篇的<使用C#给Linux写Shell脚本>结尾中,我们留下了一个关于C#如何调用BashShell的问题.在文章发布之后,我留意到有读者留言推荐使用“Pash”(一款类PowerSh ...

  4. Linux/Unix shell 脚本中调用SQL,RMAN脚本

    Linux/Unix shell脚本中调用或执行SQL,RMAN 等为自动化作业以及多次反复执行提供了极大的便利,因此通过Linux/Unix shell来完成Oracle的相关工作,也是DBA必不可 ...

  5. 从windows到linux的shell脚本编码和格式问题

    从windows到linux的shell脚本编码和格式问题   从windows到Linux的shell脚本编码和格式问题 1.异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh s ...

  6. Linux执行shell脚本方式及区别&命令后台运行

    Linux执行shell脚本方式及区别&命令后台运行 http://blog.csdn.net/heqiyu34/article/details/19089951/

  7. Linux简单Shell脚本监控MySQL、Apache Web和磁盘空间

    Linux简单Shell脚本监控MySQL.Apache Web和磁盘空间 1. 目的或任务 当MySQL数据库.Apache Web服务器停止运行时,重新启动运行,并发送邮件通知: 当服务器磁盘的空 ...

  8. Linux:从windows到linux的shell脚本编码和格式

    从windows到linux的shell脚本编码和格式问题 异常问题 :set ff=unix 启动脚本在启动时报错比如执行sh start.sh,时会报Command not found等等的错误, ...

  9. 【转】shell脚本中echo显示内容带颜色

    shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e.格式如下:   echo -e "\033[41;36m something here \033[0m&qu ...

  10. shell脚本中echo显示内容带颜色

    转自:http://www.cnblogs.com/lr-ting/archive/2013/02/28/2936792.html shell脚本中echo显示内容带颜色显示,echo显示带颜色,需要 ...

随机推荐

  1. String 类和 STL (Standard Template Library)

    目录 一. string 类 1. 构造字符串 2. string类输入 3. 使用字符串 4. 其他string类方法 5. 字符串种类 一. string 类 很多应用程序都需要处理字符串.C语言 ...

  2. 神经网络基础篇:详解导数(Derivatives)

    导数 一个函数\(f(a)=3a\),它是一条直线.下面来简单理解下导数.让 看看函数中几个点,假定\(a=2\),那么\(f(a)\)是\(a\)的3倍等于6,也就是说如果\(a=2\),那么函数\ ...

  3. 带你掌握数仓的作业级监控TopSQL

    摘要:目前TopSQL功能被用户广泛使用,是性能定位.劣化分析.审计回溯等重要的基石,为用户提供覆盖内存.耗时.IO.网络.空间等多方面的监控能力. 本文分享自华为云社区<GaussDB(DWS ...

  4. 从零开始学python | 什么是Python JSON?

    摘要:您知道如何从在线API传输数据或将各种数据存储到本地计算机吗?您已经将自己沉浸于JSON的一种方式中,JSON表示Java Script Object Notation.它是一种著名的流行数据格 ...

  5. 应用架构步入“无服务器”时代 Serverless技术迎来新发展

    摘要:以"原生蓄力,云领未来"为主题的2021年云原生产业大会上,华为云Serverless函数服务产品经理分享了"华为云Serverless函数服务,让开发上云极简高效 ...

  6. 推理实践丨如何使用MindStudio进行Pytorch模型离线推理

    摘要:本教程所示例的任务是Ascend Pytorch离线推理,即对给定的已经训练好的模型参数和推理脚本,在Ascend 310/710和Tesla设备上进行推理应用. 本文分享自华为云社区<使 ...

  7. 实践GoF的设计模式:工厂方法模式

    摘要:工厂方法模式(Factory Method Pattern)将对象创建的逻辑封装起来,为使用者提供一个简单易用的对象创建接口,常用于不指定对象具体类型的情况下创建对象的场景. 本文分享自华为云社 ...

  8. 学会这5种JS函数继承方式,前端面试你至少成功50%

    摘要:函数继承是在JS里比较基础也是比较重要的一部分,而且也是面试中常常要问到的.下面带你快速了解JS中有哪几种是经常出现且必须掌握的继承方式.掌握下面的内容面试也差不多没问题啦~ 本文分享自华为云社 ...

  9. Seal梁胜:近水楼台先得月,IT人员应充分利用AI解决问题

    2023年9月2日,由平台工程技术社区与数澈软件Seal联合举办的⌈AIGC时代下的平台工程⌋--2023平台工程技术大会在北京圆满收官.吸引了近300名平台工程爱好者现场参会,超过3000名观众在线 ...

  10. OS | 透过 inode 来理解硬链接和软链接

    什么是inode? 每个文件都对应一个唯一的inode,inode用来存储文件的元信息,包括: 对应的文件 文件字节数 文件数据块的位置 文件的inode号码 文件的硬链接数 文件的读写权限 文件的时 ...