select in 是 Shell 独有的一种循环,适用于与终端(Terminal)进行交互,在其他编程语言中是没有的。
用法 | 说明 | 脚本 |
---|
select var in val_list do statements done var 表示变量,val_list 表示取值列表,与for in循环的语法非常相似 | - select in循环用来增强交互性,运行到 select 语句时,取值列表 val_list 中的内容会以菜单的形式显示出来,用户输入菜单编号,就表示选中了某个值,这个值就会赋给变量 var,然后再执行循环体中的 statements。
- 每次循环时 select 都会要求用户输入菜单编号,并使用环境变量 PS3 的值作为提示符,PS3 的默认值为
#? 如果用户输入的菜单编号不在范围之内或什么也不输入直接回车,var会被赋一个空值,终端会重新显示一遍菜单。<br /> - select 是无限循环(死循环),输入空值,或者输入的值无效,都不会结束循环,只有遇到 break 语句,或者按下 Ctrl+D 组合键才能结束循环。
| - #!/bin/bash
- echo "What is your favourite OS?"
- select name in "Linux" "Windows" "Mac OS" "UNIX" "Android"
- do
- echo "You have selected $name"
- 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一起使用,在用户输入不同编号时做出不同的反应
脚本 | 结果 |
---|
- #!/bin/bash
- echo ‘please select your favourite season:‘
- select var in spring summer autumn winter
- do
- echo "you select the $var"
- case "$var" in
- spring)
- echo ‘spring-->3-5.‘
- break;;
- summer)
- echo ‘summer-->6-8.‘
- break;;
- autumn)
- echo ‘autumn-->9-11.‘
- break;;
- winter)
- echo ‘winter-->12-2‘
- break;;
- *)
- echo ‘you input error, re-input‘
- esac
- 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,输入空值: - please select your favourite season:
- 1) spring
- 2) summer
- 3) autumn
- 4) winter
- #? #输入空值,终端重新显示一遍菜单
- 1) spring
- 2) summer
- 3) autumn
- 4) winter
- #? 2
- you select the summer
- summer-->6-8.
|