您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Shell脚本技巧-优雅的判断用户输入值并设置默认值

时间:2020-12-04 11:47:28  来源:  作者:

在编写脚本的过程中,很多时候都需要我们去设置IP地址,密码之类的变量,为了易用性,我们对这些变量的值都会提供选择范围或者设置随机值以及默认值等。

那么如果我们要判断使用脚本的人有没有输入密码应该怎么做呢?下面看一个常见的例子:

#设置与检测数据库root密码配置

root=`openssl rand -base64 8|md5sum|cut -c 1-8 `

read -p "请输入密码[ root ],默认[ ${root} ]:" root_pass

然后我们运行这段:

Shell脚本技巧-优雅的判断用户输入值并设置默认值

运行结果

此时会出现两个情况:

  1. 用户输入了自定义的密码
  2. 用户没有输入任何信息

首先我们对脚本进行完善一下:

#设置与检测数据库root密码配置

root=`openssl rand -base64 8|md5sum|cut -c 1-8 `

echo -e "请输入密码[ root ],默认[ ${root} ]:n"

read root_pass

echo -e "当前设置的密码: [ $root_pass ]"

继续运行

Shell脚本技巧-优雅的判断用户输入值并设置默认值

执行结果

此时可以看到,如果直接回车会出现一个空白的现象,而只有用户输入的情况下才能出现密码,看到这有人会说:你都没设置,有密码才怪。的确,我还没设置,下面设置一下:

#设置与检测数据库root密码配置

root=`openssl rand -base64 8|md5sum|cut -c 1-8 `

echo -e "请输入密码[ root ],默认[ ${root} ]:n"

read root_pass

if [[ -z "$root_pass" ]];then

root_pass=$root

fi

echo -e "当前设置的密码: [ $root_pass ]"

然后执行:

Shell脚本技巧-优雅的判断用户输入值并设置默认值

出现了默认(随机)密码

然后到这里就解决了,看到这可能又有人迷惑了?就这?

别急,继续往下看。

上面这个情况是只设置一个变量,但是如果需要设置好多呢?应该怎么办?一个设置加一个判断?

NONONO,这样太麻烦了,下面介绍一个比较简单的方法:定义函数

函数内容如下:

input_check(){

#1参未需要设置的变量值[提供默认变量]

#2参为这个参数的备注信息[例如:数据库的root密码]

#3参为一个随机/默认值

#4参为这个变量名

if [[ -z "$1" ]];then

echo -e "${red_zt}检测到${2}没有输入,已使用默认值[ ${3} ]${end}"

eval `echo "$4=$3"`

else

eval `echo "$4=$1"`

fi

}

如何使用呢?我们把上面的案例放进去:

input_check(){

#1参未需要设置的变量值[提供默认变量]

#2参为这个参数的备注信息[例如:数据库的root密码]

#3参为一个随机/默认值

#4参为这个变量名

if [[ -z "$1" ]];then

echo -e "${red_zt}检测到${2}没有输入,已使用默认值[ ${3} ]${end}"

eval `echo "$4=$3"`

else

eval `echo "$4=$1"`

fi

}

input(){

echo -e "$1"

read $2

}

root=`openssl rand -base64 8|md5sum|cut -c 1-8 `

input "请输入密码[ root ],默认[ ${root} ]:" root_pass

input_check "$root_pass" "数据库[root]密码" "$root" "root_pass"

然后执行:

Shell脚本技巧-优雅的判断用户输入值并设置默认值

通过函数判断并设置变量值

有了这个函数之后,我们每次需要判断一个值只需要按照传参要求去调用即可实现默认值和自定义值的配置,例如:

#设置与检测数据库root密码配置

root=`openssl rand -base64 8|md5sum|cut -c 1-8 `

input "请输入密码[ root ],默认[ ${root} ]:" root_pass

input_check "$root_pass" "数据库[root]密码" "$root" "root_pass"

 

#数据库初始权限配置

input "是否关闭[ root ]用户远程登录[ y/n ],默认[ y ]" dislogin

input_check "$dislogin" "数据库[ root ]用户登录权限" "y" "dislogin"

 

#是否删除测试数据库

input "是否删除[ test ]数据库[ y/n ],默认[ y ]" rm_db

input_check "$rm_db" "删除[ test ]数据库确认" "y" "rm_db"

 

#结果汇总

red_z_green_z "数据库[ root ]用户密码:" "[ $root_pass ]"

red_z_green_z "允许[ root ]远程登录:" "[ $dislogin ]"

red_z_green_z "是否删除[ test ]数据库:" "[ $rm_db ]"

input "是否继续[回车继续]" Y

是不是打开了新大陆呢?其实还可以继续改进这个函数,想了解更多的话关注我等待更新吧。

如果这篇文章能够帮助到你的话请给个支持,来个三连吧;

如果你还有更好的解决方法可以在评论区展现你的强大技术能力,让大家一起学习。

关注我,带你进入Shell脚本的世界,点击下方“了解更多”即可看到我的脚本库(有很多不错的函数)。



Tags:Shell   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
写一个shell获取本机ip地址、网关地址以及dns信息。经常会遇到取本机ip、网关、dns地址,windows一个命令ipconfig /all全部获取到,但linux系统却并非如此。linux系统都自带ifc...【详细内容】
2021-12-27  Tags: Shell  点击:(1)  评论:(0)  加入收藏
什么是shellshell是c语言编写的程序,它在用户和操作系统之间架起了一座桥梁,用户可以通过这个桥梁访问操作系统内核服务。 它既是一种命令语言,同时也是一种程序设计语言,你可以...【详细内容】
2021-12-16  Tags: Shell  点击:(16)  评论:(0)  加入收藏
我们经常用到netstat命令查看主机连接状况,包括连接ip、端口、状态等,今天就练习下shell分析netsat结果。描述假设netstat命令运行的结果我们存储在nowcoder.txt里,格式如下:Pro...【详细内容】
2021-12-14  Tags: Shell  点击:(19)  评论:(0)  加入收藏
前言目标是一大学,在一次挖洞过程中遇到个sql注入,尝试进一步利用扩大危害,漏洞已报送平台进行了修复私信我获取网络安全学习资料 1.2000多本网络安全系列电子书 2.网络安全标...【详细内容】
2021-11-26  Tags: Shell  点击:(21)  评论:(0)  加入收藏
如何在Linux环境中加密shell脚本?shell脚本包含密码,不希望其他具有执行权限的人查看shell脚本并获取密码。可以安装使用shc工具,普通用户无法读取shc创建的加密Shell...【详细内容】
2021-11-04  Tags: Shell  点击:(40)  评论:(0)  加入收藏
ZheTian强大的远程加载和执行ShellCode工具,免杀shellcode加载框架命令详解-u string:从远程服务器加载base64混淆后的字节码。-r string:从本地文件内读。-s string:读取修改的...【详细内容】
2021-10-21  Tags: Shell  点击:(75)  评论:(0)  加入收藏
最近工作中需要开发前端操作远程虚拟机的功能,简称 WebShell。基于当前的技术栈为 react+django,调研了一会发现大部分的后端实现都是 django+channels 来实现 websocket 服务。...【详细内容】
2021-09-13  Tags: Shell  点击:(52)  评论:(0)  加入收藏
公众号:白帽子左一 专注分享渗透经验,干货技巧...本文由团队手电筒分享,如果你还是个小白担心看不懂,没关系,“三步写马””如何上传木马”“如何拿下服务器并妥善管理”等实战内...【详细内容】
2021-08-11  Tags: Shell  点击:(115)  评论:(0)  加入收藏
shell脚本是一个命令语言,面向的是操作系统执行。如果写过shell脚本的话,应该体会过编写过程的痛苦。因为shell并不是一个编程语言,并不支持常见的数组,JSON等数据结构,也不支持...【详细内容】
2021-08-09  Tags: Shell  点击:(109)  评论:(0)  加入收藏
redpill项目旨在帮助广大研究人员在后渗透任务中实现反向TCP Shell。在日常的红队活动中,我们经常需要使用非常规的方式来访问目标系统,比如说通过反向TCP Shell来绕过系统管...【详细内容】
2021-07-21  Tags: Shell  点击:(118)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条