select in 循环用来增强交互性,它可以显示出带编号的菜单,用户输入不同的编号就可以选择不同的菜单,并执行不同的功能。

select in 是 Shell 独有的一种循环,非常适合终端(Terminal)这样的交互场景,C语言、C++、Java、Python、C# 等其它编程语言中是没有的。

#?用来提示用户输入菜单编号;^D表示按下 Ctrl+D 组合键,它的作用是结束 select in 循环。

运行到 select 语句后,取值列表 value_list 中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量 variable,然后再执行循环体中的 statements(do 和 done 之间的部分)。

每次循环时 select 都会要求用户输入菜单编号,并使用环境变量 PS3 的值作为提示符,PS3 的默认值为#?,修改 PS3 的值就可以修改提示符。

如果用户输入的菜单编号不在范围之内,那么就会给 variable 赋一个空值;如果用户输入一个空值(什么也不输入,直接回车),会重新显示一遍菜单。

注意,select 是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到 break 语句,或者按下 Ctrl+D 组合键才能结束循环。

# vim select.sh

#########################################

#!/bin/bash

#功能描述(Description):根据用户选择的菜单实现对应的功能.

echo "请根据提示选择一个选项."

PS3="Please input your choice:"

select item in "CPU" "IP" "MEM" "exit"

do

case $item in

"CPU")

uptime;;

"IP")

ip a s;;

"MEM")

free;;

"exit")

exit;;

*)

echo error;;

esac

break

done

echo  "Your choice is $item."

##########################################

PS 是 prompt statement (提示表达式)的缩写。

PS1 – Default interaction prompt

PS2 – Continuation interactive prompt

PS3 – Prompt used by “select” inside shell script

PS4 – Used by “set -x” to prefix tracing output

PROMPT_COMMAND – Bash shell executes the content of the PROMPT_COMMAND just before displaying the PS1 variable.

bash中的PS1、 PS2、PS3、PS4和PROMPT_COMMAND详解

https://via.hypothes.is/https://blog.51cto.com/kusorz/1968827

Bash Shell: Take Control of PS1, PS2, PS3, PS4 and PROMPT_COMMAND

https://via.hypothes.is/https://www.thegeekstuff.com/2008/09/bash-shell-take-control-of-ps1-ps2-ps3-ps4-and-prompt_command

Unix / Linux Shell - The select Loop

https://via.hypothes.is/https://www.tutorialspoint.com/unix/select-loop.htm

shell编程中select语句的使用

https://blog.csdn.net/m0_37556444/article/details/82915966

Shell select in循环详解

https://via.hypothes.is/http://c.biancheng.net/view/2829.html

select loop

https://via.hypothes.is/https://bash.cyberciti.biz/guide/Select_loop

Linux shell中case与select语句

https://blog.51cto.com/11555417/2165029?source=dra

md5sum 和 sha256sum用于 验证软件完整性

https://www.cnblogs.com/xuyaowen/p/md5sum_sha256_usages.html

【shell】How can I create a select menu in a shell script?相关推荐

  1. 【Mysql】EVENT 使用基础 - Create Event

    目录 [Mysql]EVENT 使用基础 - Create Event [Mysql]EVENT 使用基础 - Alter Event [Mysql]EVENT 使用基础 - Drop Event [ ...

  2. 【Linux】30.ssh不用手动输入密码登录终端sshpass 和 shell脚本后跟参数自动匹配case的用法

    ssh不用手动输入密码登录终端sshpass 和 case的组合用法 1.sshpass 的用法 在第一次手动输入密码ssh mdc@172.16.34.17 登陆上终端后,可以把下面两条语句做成sh ...

  3. 【c++】factory的使用:create和destory,以cicadaplayer的render实现为例

    webrtc里大量的factory 用来屏蔽具体impl 来创建某一抽象类的过程 cicadaplayer也使用了,调用方只需要使用create方法就可以创建 create方法可以传递参数的. 调用 ...

  4. 【Linux】ln: failed to create symbolic link ‘*.so’: Operation not supported

    问题 ln: failed to create symbolic link '*.so': Operation not supported 总结 在Linux虚拟机与windows主机进行文件共享,将 ...

  5. 【Liunx】进程的程序替换——自定义编写极简版shell

    目录 进程程序替换[1~5] 1.程序替换的接口(加载器) 2.什么是程序替换? 3.进程替换的原理 4.引入多进程 5.系列程序替换接口的详细解析(重点!) 自定义编写一个极简版shell[6~8] ...

  6. 【Groovy】Groovy 脚本调用 ( Groovy 类中调用 Groovy 脚本 | 参考 Script#evaluate 方法 | 创建 Binding 对象并设置 args 参数 )

    文章目录 一.Groovy 类中调用 Groovy 脚本 1.参考 Script#evaluate 方法分析 Groovy 类中调用 Groovy 脚本 2.创建 Binding 对象并设置 args ...

  7. 【c++】26.浅谈“事件驱动”、select、poll、epoll

    浅谈"事件驱动" 1.通常,我们设计一个事件处理模型的程序有两种思路: 一种是通过轮询的方式; 一种通过事件驱动的方式,事件驱动方式也被称为消息通知方式. 下面举个简单收信的例子, ...

  8. 【转】ABP源码分析三十七:ABP.Web.Api Script Proxy API

    ABP提供Script Proxy WebApi为所有的Dynamic WebApi生成访问这些WebApi的JQuery代理,AngularJs代理以及TypeScriptor代理.这些个代理就是j ...

  9. 【NOTE】python3.6下scons运行提示找不到SCons.Script解决方式

    一.问题&错误信息: 在python3.6.1环境下通过scons-3.3.0编译最新的mongodb-src-r3.6.0-rc报错: ImportError:No module named ...

最新文章

  1. this指针的用法详解
  2. python求非线性优化问题_用python优化非线性函数
  3. JavaScript抽象类及Class.create备忘
  4. canvas绘制竖排的数字_Python绘制可爱的卡通人物 | 【turtle使用】
  5. 老电脑linux内核,如何删除废旧的Linux内核(kernel)
  6. PyOpenCV 实战:借助视觉识别技术实现围棋终局的胜负判定
  7. 亚马逊Alexa已接入2万种设备,22岁开发者月入1万美元
  8. 数据结构--变长数组
  9. 大数据学习---HIVE入门SQL学习
  10. Java——NIO和IO的区别
  11. 个人信息安全规范----2、个人信息安全基本原则
  12. 20年中国人均GDP排名变化
  13. 查询数据表中重复数据及重复次数
  14. JS一些常用证件信息的正则表达式
  15. POS标记——HMM模型
  16. python下载详细教程
  17. html语言的title在哪,网页中title标题使用地方有哪些
  18. 前端axios下载excel文件(二进制)的处理方法
  19. 运筹学那些事,专科学生学习运筹学之马尔柯夫分析,No.8
  20. 【Django 开发】面试招聘信息网站(用户登录注册投在线递简历)

热门文章

  1. PC端的网站建设真的已经不重要了吗
  2. 嵌入式面试之————大小端
  3. 崩坏3服务器维护2月8号,崩坏3 8月29日更新官方公告
  4. HTML5“爱心鱼”游戏总结
  5. 线上软测培训机构柠檬班与iTEST.AI平台赋能测试行业共同发展、共绽异彩
  6. element-ui版本更新兼容问题
  7. 如何将微信公众号上的文章下载下来?
  8. kali Linux 2021 新版安装
  9. 直播平台源码中的推拉流是什么
  10. java做小游戏扫雷(附源码)