shell中提供菜单选择的条件判断结构。
[root@master ~]# select fname in cat dog sheep mouse;do echo your choice: \"$REPLY\) $fname\";break;done
1) cat
2) dog
3) sheep
4) mouse
#? 3 # 在此选择序号3
your choice: "3) sheep" # 将输出序号3对应的内容
语法结构:
select name [ in word ] ; do cmd_list ; done
它的结构几乎和for循环的结构相同。有以下几个要点:
(1).in关键词后的word将根据IFS变量进行分割,分割后的每一项都进行编号,作为菜单序号被输出,如果省略in word,则等价于"in $@",即将位置变量的内容作为菜单项。
(2).当选择菜单序号后,该序号的内容将保存到变量name中,并且所输入的内容(一般是序号值,例如上面的例子中输入的3,但不规定一定要输入序号值,例如随便输入几个字符)保存到特殊变量REPLY中。
(3).每次输入选择后,select语句都将重置,如果输入的菜单序号存在,则cmd_list会重新执行,变量name也将重置。如果没有break命令,则select语句会一直运行,如果遇到break命令,将退出select语句。
仍然是上面的示例:但不使用break
[root@master ~]# select fname in cat dog sheep mouse;do echo your choice: \"$REPLY\) $fname\";done
1) cat
2) dog
3) sheep
4) mouse
#? 2
your choice: "2) dog"
#? habagou # 随意输入几个字符
your choice: "habagou) " # 变量fname被重置为空,变量REPLY被赋予了输入的值habagou
#? 2 3
your choice: "2 3) "
#? ^C # 直到杀掉进程select才结束
————Blueicex 2020/03/18 19:54 blueice1980@126.com