[转帖]Linux平台shell脚本输入密码,不显示明文

linux,平台,shell,脚本,输入,密码,显示,明文 · 浏览次数 : 0

小编点评

**方案一:使用stty命令** ```bash #!/bin/bash stty -echo # 不显示用户输入 read -p \"请输入密码:\" pwdstrstty echo # 恢复显示用户输入 ``` **方案二:直接使用read来实现** ```bash echo -e \"请输入密码: \\c\"pwdstr=''while : ;do read -n 1 -s -p \"\" pw if [ $pw ]; then pwdstr=${pwdstr}$pw echo -e \"*\\c\" else echo fi done ```

正文

需求: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脚本输入密码,不显示明文相似的内容:

[转帖]Linux平台shell脚本输入密码,不显示明文

需求:shell脚本中输入密码,要求不显示明文,需要将其转换为“*”星号,或者不显示 实现方案:有两种实现方案,一是通过stty命令来实现,二是直接使用read来实现 方案一:使用stty来实现 使用stty -echo可以实现不显示密码,就像登录Linux系统输入密码时一样,stty的代码如下:

[转帖]Linux 平台使用shc 工具加密shell 脚本

2021-08-03 20:4510030原创Linux 本文链接:https://www.cndba.cn/dave/article/4642 1 shc 工具说明 shell 脚本是常用脚本,运维中经常使用,但有时候在shell 脚本中会包含一些敏感的信息,比如密码或者特殊的参数,此时我们就可以

[转帖]通过Shell脚本自动监控JAVA进程中线程cpu使用率

https://gitee.com/jialy/auto-monitor-java-process/tree/master 本文主要介绍在 show-busy-java-threads.sh 脚本的功能基础上,通过 process-cpu-monitor.sh 脚本实现Linux平台上Java进程或

[转帖]Linux中./configure、make、make install命令详解

简单来说,make 是编译,make install 是安装。 总结:linux编译安装中configure、make和make install各自的作用 • ./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

[转帖]Linux——Shell脚本参数传递的2种方法

https://www.cnblogs.com/caoweixiong/p/12334418.html 前言 平时会遇到很多脚本都有参数选项,类似: ./test.sh -f config.conf -v --prefix=/home 这种脚本怎么写呢? 一、Shell 特殊参数解释 首先来看几个特

[转帖]学习如何编写 Shell 脚本(基础篇)

https://juejin.cn/post/6930013333454061575 前言 如果仅仅会 Linux 一些命令,其实已经可以让你在平时的工作中游刃有余了。但如果你还会编写 Shell 脚本(尤其是前端工程师),它会令你“添光加彩”。如果本文对你有所帮助,请点个👍 👍 👍 吧。 S

[转帖]linux(centos8):zabbix配置邮件报警(监控错误日志)(zabbix5.0)

http://t.zoukankan.com/architectforest-p-13204184.html 一,zabbix5.0发邮件报警的准备工作: zabbix5.0在linux平台上的安装:参见这一篇: https://www.cnblogs.com/architectforest/p/1

[转帖]Linux开发环境——SCL软件集

一、SCL简介 1、SCL简介 SCL(Software Collections)是一个CentOS/RHEL Linux平台的软件多版本共存解决方案,为RHEL/CentOS Linux用户提供一种方便、安全地安装和使用应用程序和运行时环境的多个版本的方式,同时避免把系统搞乱。 CentOS/RH

[转帖]Linux 命令详解(三)./configure、make、make install 命令

https://www.cnblogs.com/tinywan/p/7230039.html 这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤 一、基本信息 1、./configure 是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要

[转帖]linux 调优篇 :硬件调优(BIOS配置)* 壹

https://blog.csdn.net/tony_vip?type=blog 一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能