Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >shell编程-交互 脚本菜单

shell编程-交互 脚本菜单

原创
作者头像
用户3599907
修改于 2020-07-17 06:23:34
修改于 2020-07-17 06:23:34
2.4K2
举报
文章被收录于专栏:shell编程shell编程

##shell编程交互 脚本菜单

shell脚本的交互最常用的方式是使用菜单,通常是echo打印菜单出来。

代码语言:txt
AI代码解释
复制
[root@db ~]# cat echomen.sh 
#!/bin/bash
#simple script menu
function diskapace {
clear
df -k
}

function whoseon {
clear
who
}

function menusage {
clear
cat /proc/meninfo
}

function menu {
clear 
echo
echo -e "\t\t\t test menu"
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users" 
echo -e "\t3. Display memory usage" 
echo -e "\t0. Exit menu\n\n"
#-en 选项会去掉末尾的换行符,这让菜单看起来更专业一些
echo -en "\t\tEnter option:" 
#read 命令读取用户输入
read -n 1 option
}

while [ 1 ]
do 
	menu
	case $option in
	0)
        break ;;
	1)
        diskapace  ;;
	2)
		whoseon ;;
	3)
		menusage ;;
	*)
		clear
		echo "sorry,wrong selection" ;;
	esac
	echo -en "\n\n\t\thit any to contunue"
	read -n 1 line
done
clear
代码语言:txt
AI代码解释
复制
运行:

			 test menu
	1. Display disk space
	2. Display logged on users
	3. Display memory usage
	0. Exit menu

		Enter option:

上面的脚本基本上是用echo打印的时间都花在写菜单,为此bash shell提供了一个命令select。

select命令只需要一条命令就可以创建菜单,并获取用户输入,命令格式

代码语言:txt
AI代码解释
复制
select variable in list
do
    commands
done

list是由空格组成的文本列表

上面的脚本可以修改为以下这种形式:

代码语言:txt
AI代码解释
复制
#!/bin/bash
#simple script menu
function diskapace {
clear
df -k
}

function whoseon {
clear
who
}

function menusage {
clear
cat /proc/meninfo
}

select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit menu"
do 
	case $option in
	"Exit menu")
        break ;;
	"Display disk space")
        diskapace  ;;
	"Display logged on users")
		whoseon ;;
	"Display memory usage")
		menusage ;;
	*)
		clear
		echo "sorry,wrong selection" ;;
	esac
done
clear
代码语言:txt
AI代码解释
复制
运行:
# ./selectmeun.sh 
1) Display disk space	    3) Display memory usage
2) Display logged on users  4) Exit menu
#? 

可以把菜单选项赋值到变量中,动态的生成菜单项。

例如根据/root目录下的文件修改时间,动态的最新修改的8个文件名菜单项

代码语言:txt
AI代码解释
复制
#!/bin/bash
#test select option men 
menu=`ls -t /root/menu | cat | sed -n "1,8p"`

select option in ${menu} "Exit menu"
do
        echo ${option}
done
代码语言:txt
AI代码解释
复制
#ls /root/menu
test1  test2  test3  test4  test5  test6  test7  test8  test9

( -t :用文件和目录的更改时间排序)
#ls -t /root/menu
test9  test8  test7  test6  test4  test5  test3  test2  test1

#./dynamicmenu.sh
[root@db ~]# ./men.sh 
1) test9      3) test7	    5) test4	  7) test3	9) Exit menu
2) test8      4) test6	    6) test5	  8) test2
#? 

如果删除一个文件或者增加一个文件,再次执行时菜单项就会变化
删除文件test3 、test5并且创建test10文件后再次执行脚本菜单变化了
1) test10     3) test8	    5) test6	  7) test2	9) Exit menu
2) test9      4) test7	    6) test4	  8) test1
#? 

注意:在使用select命令中,存储的变量值是菜单中的文本字符串而不是菜单选项中相关联的数字。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
太棒了
太棒了
回复回复点赞举报
测试
测试
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
String常见面试题
捞月亮的小北
2024/02/22
950
推荐一组shell脚本菜单的嵌套模版
如果大家有需要帮忙推荐的工具、框架、应用、脚本可以在文章下方留言,留言中被点赞、推荐回复较多的,波哥就会帮各位提前安排哦!
IT运维技术圈
2024/12/05
1000
推荐一组shell脚本菜单的嵌套模版
《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
18.1 创建文本菜单 直接上例子吧:   1 #!/bin/bash   2 function menu   3 {   4         clear   5         echo   6         echo -e "\t\t\tSys Admin Menu\n"   7         echo -e "\t1. Display disk space"   8         echo -e "\t2. Display logged usage"   9         e
xcywt
2018/01/11
1.3K0
《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
学习PHP生成器的使用
听着高大上的名字,感觉像是创造什么东西的一个功能,实际上,生成器是一个用于迭代的迭代器。它提供了一种更容易的方式来实现简单的对象迭代,相比较定义类实现Iterator接口的方式,性能开销和复杂性大大降低。
硬核项目经理
2020/04/26
8480
剑指Offer面试题:3.替换空格
  在网络编程中,如果URL参数中含有特殊字符,如空格、'#'等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在'%'后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成"%20"。再比如'#'的ASCII码为35,即十六进制的0x23,它在URL中被替换为"%23"。
Edison Zhou
2018/08/20
4170
剑指Offer面试题:3.替换空格
GlusterFS 4.1 深入使用
glusterfs可以动态的增加副本,但是由于采用的hash方式动态计算出的数据存储位置,因而新增加的副本并不会有数据,需要手动执行磁盘数据平衡才行
jackxiao
2021/11/16
4670
数据结构之链表(单链表)
数据结构之顺序表中我们有讲到顺序表有一些问题和缺点,为了能解决顺序表的问题,我们引入一个新的线性表——链表
摘星
2023/04/28
2900
数据结构之链表(单链表)
Mysql系列 - 第4天:DDL常见操作汇总
DDL:Data Define Language数据定义语言,主要用来对数据库、表进行一些管理操作。
路人甲Java
2019/09/16
9940
python3 入门 (三) 函数与lambda表达式、闭包
函数 是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。 函数代码块以def关键词开头,后接函数标识符名称和圆括号() 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明 函数内容以冒号起始,并且缩进 Return[expression]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None 函数的定义: 1 def test0(): 2 "函数_文档字符串" 3 print(
欠扁的小篮子
2018/04/11
1.1K0
扑克牌的顺子
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成任意数字。 可以把5张牌看成由5个数字组成的数组。大、小王是特殊的数字,我们不妨把它们定义为0,这样就能和其他扑克牌区分开来了。 接下来我们分析怎样判断5个数字是不是连续的,最直观的方法是把数组排序。值得注意的是,由于0可以当成任意数字,我们可以用0去补满数组中的空缺。如果排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但只要我们有足够的0可以补
猿人谷
2018/01/17
7090
SpringDataJPA之Repository接口
  Repository 接口是 Spring Data JPA 中为我我们提供的所有接口中的顶层接口,而且是个标志接口,Repository 提供了两种查询方式的支持 1)基于方法名称命名规则查询 2)基于@Query 注解查询
用户4919348
2019/05/19
3K0
2020-12-15 rocksdb研究
参考文章:gorocksdb 的安装与使用搭建环境,文章里描述的几个错误我都没有遇到,很顺利的完成了,因此列下来 1、开发环境 ubuntu18 2、下载 rocksdb 最新的发行版
oracle3
2022/04/22
6180
Java8——方法引用
方法引用就是通过类名或方法名引用已经存在的方法来简化lambda表达式。那么什么时候需要用方法引用呢?如果lamdba体中的内容已经有方法实现了,我们就可以使用方法引用。
Java旅途
2020/07/13
8282
es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)
1.函数可以设置参数默认值 1 function test1(x,y=1){ 2 console.log(x,y) 3 } 4 test1(10)//10 1 2.rest参数:形式为...变量名 1 function test2(a,...b){ 2 for(let i of b){ 3 a+=i 4 } 5 console.log(a) 6 } 7 // 说明传入的参数是一个一个的传入,而不是数组形式 8
用户1149564
2018/01/11
1.2K0
C++中的string类用法简介
string是C++标准库的一个重要的部分,主要用于字符串处理。可以使用输入输出流方式直接进行string操作,也可以通过文件等手段进行string操作。同时,C++的算法库对string类也有着很好的支持,并且string类还和c语言的字符串之间有着良好的接口。
全栈程序员站长
2022/07/01
5540
C++中的string类用法简介
ip prefix-list命令详解和route-map
To place it in service: router bgp 65011 neighbor 1.2.3.4 prefix-list test11 in
刘銮奕
2019/07/22
4.5K0
轻度Linux服务器维护人员常用的Shell脚本命令
笔者平时属于非专业运维人员,但是偶尔也需要接触一些测试服务器和个人VPS服务器。所以收集了一些常用的Shell脚本,希望跟我一样的开发人员能有一些收获。 文件操作 更改当前目录 cd 获取当前目录 pwd 删除文件/目录 rm -f or rm -rf or rmdir 创建文件 touch or cat > xxx 创建临时文件 mktemp testing.XXXXXX, 文件名末尾加6个X 创建临时目录 mktemp -d dir.XXXXXX, 目录名末尾加6个X 创建目录 mkdir 移动文件/文
李海彬
2018/03/28
2.2K0
JavaScript(五):函数(闭包,eval)
1.函数的申明:三种方法: function命令 函数表达式:变量赋值 Function构造函数 1 //method 1: function命令 2 function test(){ 3 console.log('hello function'); 4 } 5 6 //method 2:函数表达式,赋值给变量 7 var test1=function(){//这是个匿名函数 8 console.log('hello function1'); 9 };//注意这里有分号
用户1149564
2018/01/11
1.5K0
JavaScript(五):函数(闭包,eval)
GlusterFS 4.1 版本选择和部署
1、无元数据设计 GlusterFS设计没有集中或分布式元数据,取而代之的是弹性哈希算法。集群中的任何服务器、客户端都可利用哈希算法、路径及文件名进行计算,就可以对数据进行定位,并执行读写访问操作。
jackxiao
2021/11/16
7670
反射类的方法
关于对类的方法的反射。其中包括静态方法,普通方法,带参数的方法,以及最重要的String[]数组的方法的反射以及需要注意的细节问题,都是基础,所以请各位多多包涵!
MonroeCode
2018/01/11
1.2K0
相关推荐
String常见面试题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档