select 表达式是一种bash的扩展应用,动作包括:
(1)、自动用1,2,3,4列出菜单 (没有echo指令,自动显示菜单)
(2)、自动read输入选择 (没有 read指令,自动输入)
(3)、赋值给变量 (没有赋值指令,自动输入数字后,赋值字符串给变量)
1、 select典型例子
[macg@machome ~]$ vi test.sh echo "What is your favourite OS?" select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do break select本身就是一个循环,break是当选择后,就跳出循环 done echo "You have selected $var" |
[macg@machome ~]$ sh test.sh What is your favourite OS? 1) Linux 2) Gnu Hurd 3) Free BSD 4) Other #? 2 You have selected Gnu Hurd Select输入选择是数字,但变量值却是字符串 |
2、虽然select本身就是循环,但不建议用他的循环 ,因为select虽然循环却不再显示菜单,只循环输入,所以seleckt 语句干脆直接用break,只执行一次,在其上另配while循环
while echo "display current netconfig:" do select vi in "ifconfig -a" "hosts" "netmasks" "quit" do case $vi in 虽然输入是1,2,3,4,5,但case变量输入值却是菜单项(字符串) "ifconfig -a") /sbin/ifconfig -a;; "hosts") more hosts;; "netmasks") more netmasks;; "quit") exit 0;; *) continue;; esac break done done |
$ sh test display current netconfig 1) ifconfig -a 3) netmasks 2) hosts 4) quit |
3、select空格出错的问题
问题:
下面的代码运行出错,如果package name那没有空格就没有问题
select var in "All" "package name" do case $var in All) break;; package name) break;; *);; esac done 解答:
case语句的语法问题,跟变量赋值时一个道理 case里面的每一个分支变量中要想将空格作为字符串的一部分,就得加上引号 这样就好了: select var in "All" "package name" do case $var in All) break;; "package name") break;; *);; esac done