select in 是 Shell 独有的一种循环,适用于与终端(Terminal)进行交互,在其他编程语言中是没有的。

用法
说明
脚本

select var in val_list
do
    statements
done

var 表示变量,val_list 表示取值列表,与for in循环的语法非常相似

  1. select in循环用来增强交互性,运行到 select 语句时,取值列表 val_list 中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量 var,然后再执行循环体中的 statements。
  2. 每次循环时 select 都会要求用户输入菜单编号,并使用环境变量 PS3 的值作为提示符,PS3 的默认值为#?
  3. 如果用户输入的菜单编号不在范围之内或什么也不输入直接回车,var会被赋一个空值,终端会重新显示一遍菜单。
  4. select 是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到 break 语句,或者按下 Ctrl+D 组合键才能结束循环。
  1. #!/bin/bash
  2. echo "What is your favourite OS?"
  3. select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
  4. do
  5. echo "You have selected $name"
  6. done

运行结果:

What is your favourite OS?
1) Linux
2) Windows
3) Mac OS
4) UNIX
5) Android
#? 4
You have selected UNIX
#? 9
You have selected
#? 2
You have selected Windows
#?^D

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

select in 与case in一起使用,在用户输入不同编号时做出不同的反应

脚本
结果
  1. #!/bin/bash
  2. echo 'please select your favourite season:'
  3. select var in spring summer autumn winter
  4. do
  5. echo "you select the $var"
  6. case "$var" in
  7. spring)
  8. echo 'spring-->3-5.'
  9. break;;
  10. summer)
  11. echo 'summer-->6-8.'
  12. break;;
  13. autumn)
  14. echo 'autumn-->9-11.'
  15. break;;
  16. winter)
  17. echo 'winter-->12-2'
  18. break;;
  19. *)
  20. echo 'you input error, re-input'
  21. esac
  22. done

运行结果1,输入正确选项:

  • please select your favourite season:
  • 1) spring
  • 2) summer
  • 3) autumn
  • 4) winter
  • #? 1
  • you select the spring
  • spring-->3-5.

运行结果2,输入错误选项:

  • please select your favourite season:
  • 1) spring
  • 2) summer
  • 3) autumn
  • 4) winter
  • #? r #输入错误,会要求重新输入
  • you select the
  • you input error, re-input
  • #? 2
  • you select the summer
  • summer-->6-8.

运行结果3,输入空值:

  1. please select your favourite season:
  2. 1) spring
  3. 2) summer
  4. 3) autumn
  5. 4) winter
  6. #?  #输入空值,终端重新显示一遍菜单
  7. 1) spring
  8. 2) summer
  9. 3) autumn
  10. 4) winter
  11. #? 2
  12. you select the summer
  13. summer-->6-8.

16 shell select in 循环的更多相关文章

  1. Linux Shell系列教程之(十四) Shell Select教程

    本文是Linux Shell系列教程的第(十四)篇,更多Linux Shell教程请看:Linux Shell系列教程 在上一篇文章:Linux Shell系列教程之(十三)Shell分支语句case ...

  2. (转)Linux Shell系列教程之(十四) Shell Select教程

    本文属于<Linux Shell 系列教程>文章系列,该系列共包括以下 18 部分: Linux Shell系列教程之(一)Shell简介 Linux Shell系列教程之(二)第一个Sh ...

  3. 04 shell编程之循环语句

    Shell编程之循环语句 学习目标: 掌握for循环语句编程 掌握while循环语句编程 目录结构: For循环语句 l  读取不同的变量值,以逐个执行同一组命令 l  For语句结构 for 变量名 ...

  4. shell中的循环

    shell中的循环 for循环 类似于C语言的步长控制 例如: ;i<=;i++)); ); done 将1到10,依次乘以4,然后打印出来. 这里顺便提一下,shell里面表达式的计算,可以有 ...

  5. shell中for循环

    shell中for循环总结 最常用的就是遍历操作某一类文件,比如批量建索引. for i in `ls` do samtools faidx $i done 注意:for末尾不需要冒号(:),循环的代 ...

  6. shell中for循环总结

    关于shell中的for循环用法很多,一直想总结一下,今天网上看到上一篇关于for循环用法的总结,感觉很全面,所以就转过来研究研究,嘿嘿... 1. for((i=1;i<=10;i++));d ...

  7. shell脚本学习-循环

    跟着RUNOOB网站的教程学习的笔记 for循环 与其他编程语言类似,shell支持for循环. for循环一般格式为: for var in item1 item2 ... itemN do com ...

  8. shell的for循环

    与其他编程语言类似,Shell支持for循环. for循环一般格式为: for 变量 in 列表 do command1 command2 ... commandN done 列表是一组值(数字.字符 ...

  9. Shell中的循环语句实例

    1.for循环语句实例1.1 最基本的for循环 #!/bin/bash for x in one two three four do     echo number $x done 注:" ...

随机推荐

  1. (转)Linux下用户组、文件权限详解

    转自https://www.cnblogs.com/123-/p/4189072.html 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它 ...

  2. 『动善时』JMeter基础 — 24、JMeter中使用“用户参数”实现参数化

    目录 1.用户参数组件介绍 2.用户参数界面介绍 3.使用"用户参数"组件实现参数化 (1)测试计划内包含的元件 (2)线程组元件内容 (3)HTTP请求组件内容 (4)用户参数组 ...

  3. ntp导致的时钟回拨

    ntp导致的时钟回拨 时钟回拨 我们的服务器时间校准一般是通过ntp进程去校准的.但由于校准这个动作,会导致时钟跳跃变化的现象. 而这种情况里面,往往回拨最能引起我们的困扰,回拨如下所示: 会引起什么 ...

  4. 90%的人都不知道的Node.js 依赖关系管理(下)

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/node-dependency-manage ...

  5. JS 反射机制及 Reflect 详解

    一.什么是反射机制 反射机制是在编译阶段不知道是哪个类被加载,而是在运行的时候才加载.执行. 也就是说,反射机制指的是程序在运行时能够获取自身的信息. js 中的 apply 就是反射机制. 二.Re ...

  6. Step By Step(Lua数据持久化)

    Step By Step(Lua数据持久化) 1. 数据文件:    我们可以利用Lua中table的构造式来定义一种文件格式,即文件中的数据是table构造并初始化的代码,这种方式对于Lua程序而言 ...

  7. Docker学习(10) Docker的远程访问

    Docker的远程访问 只需配置

  8. Python3.6 的字典为什么会快

    作者:青南链接:https://zhuanlan.zhihu.com/p/73426505来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在Python 3.5(含)以 ...

  9. (重磅)Internal: Failed to call ThenRnnForward with model config问题的解决(Keras 2.4.3和Tensorflow2.0系列)

    与此问题斗争了整整十天.win10,keras2.4.3,CUDA 10.1,CUDNN 7.6, tensorflow 2.3.0,驱动程序nvida 452 该问题出现在BiLSTM(GPU加速) ...

  10. Lombok——一款Java构建工具,“懒人”必备!!(idea版)

    一.简介 Lombok 是一种 Jav 构建工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(POJO).它是通过注解实现这一目的. 二.使用 1.在idea中安装 ...