select 语句能循环执行定义的命令,知道满足条件是退出,其语法格式如下:
select val [in value1 value2…] #省略时默认为select val in $@
do
commands
done
说明:①首先把in后面的列表的每一项都显示出来,并且在每一项前添加一个数字标号。如:1)
②显示一个提示符#?(默认为#?),并等待用户输出数字标号来选择执行。
③用户输出数字标号来选择相应的选项,无论用户输出什么,都会保存到变量$REPLY中。
④如果用户输入的数据标号可以和一开始显示出来的菜单项的数字标号对应上,则变量val的值被设置为数字标号后面的选项,也就是用空格分隔的列表中的某一字符串,如果不能匹配,则不设置val的值。
⑤循环体执行完后会再次循环,所以退出需要用条件beak设置。
⑥select默认提示字符为#?,如想自定义提示符,可在脚本开头第二行添加为:PS3=”自定义提示符”
演示示例:
[root@Centos8 shell_scripy]# cat select.sh #编写一个演示脚本
#!/bin/bash
select var in “水果” “牛肉” “西瓜” “苹果” “雪梨”
do
if [ “
v
a
r
"
=
"
水
果
"
]
;
t
h
e
n
e
c
h
o
"
I
l
i
k
e
水
果
"
e
l
i
f
[
"
var" = "水果" ];then echo "I like 水果" elif [ "
var"="水果"];thenecho"Ilike水果"elif["var” = “牛肉” ];then
echo “I like 牛肉”
elif [ “
v
a
r
"
=
"
西
瓜
"
]
;
t
h
e
n
e
c
h
o
"
I
l
i
k
e
西
瓜
"
e
l
i
f
[
"
var" = "西瓜" ];then echo "I like 西瓜" elif [ "
var"="西瓜"];thenecho"Ilike西瓜"elif["var” = “苹果” ];then
echo “I like 苹果”
elif [ “$var” = “雪梨” ];then
echo “I like 雪梨”
else
break
fi
done
执行结果:
[root@Centos8 shell_scripy]# ./select.sh
- 水果
- 牛肉
- 西瓜
- 苹果
- 雪梨
#? 1
I like 水果
#? 4
I like 苹果
#? 3
I like 西瓜
#? 5
I like 雪梨
#?