shell中的select用法

回复 收藏
select也是循环的一种,它比较适合用在用户选择的情况下。
比如,我们有一个这样的需求,运行脚本后,让用户去选择数字,选择1,会运行w命令,选择2运行top命令,选择3运行free命令,选择4退出。脚本这样实现:
  1. #!/bin/bash
  2. echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
  3. echo
  4. select command in w top free quit
  5. do
  6.     case $command in
  7.     w)
  8.         w
  9.         ;;
  10.     top)
  11.         top
  12.         ;;
  13.     free)
  14.         free
  15.         ;;
  16.     quit)
  17.         exit
  18.         ;;
  19.     *)
  20.         echo "Please input a number:(1-4)."
  21.         ;;
  22.     esac
  23. done
执行结果如下:
sh select.sh
Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit

1) w
2) top
3) free
4) quit
#? 1
16:03:40 up 32 days,  2:42,  1 user,  load average: 0.01, 0.08, 0.08
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    61.135.172.68    15:33    0.00s  0.02s  0.00s sh select.sh

#? 3
             total       used       free     shared    buffers     cached
Mem:       1020328     943736      76592          0      86840     263624
-/+ buffers/cache:     593272     427056
Swap:      2097144      44196    2052948
#?


我们发现,select会默认把序号对应的命令列出来,每次输入一个数字,则会执行相应的命令,命令执行完后并不会退出脚本。它还会继续让我们再次输如序号。序号前面的提示符,我们也是可以修改的,利用变量PS3即可,再次修改脚本如下:
  1. #!/bin/bash
  2. PS3="Please select a number: "
  3. echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
  4. echo
  5. select command in w top free quit
  6. do
  7.     case $command in
  8.     w)
  9.         w
  10.         ;;
  11.     top)
  12.         top
  13.         ;;
  14.     free)
  15.         free
  16.         ;;
  17.     quit)
  18.         exit
  19.         ;;
  20.     *)
  21.         echo "Please input a number:(1-4)."
  22.     esac
  23. done
如果想要脚本每次输入一个序号后就自动退出,则需要再次更改脚本如下:
  1. #!/bin/bash
  2. PS3="Please select a number: "
  3. echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit"
  4. echo
  5. select command in w top free quit
  6. do
  7.     case $command in
  8.     w)
  9.         w;exit
  10.         ;;
  11.     top)
  12.         top;exit
  13.         ;;
  14.     free)
  15.         free;exit
  16.         ;;
  17.     quit)
  18.         exit
  19.         ;;
  20.     *)
  21.         echo "Please input a number:(1-4).";exit
  22.     esac
  23. done



2015-05-12 16:08 1 条评论 举报
已邀请:
0

649969462

赞同来自:

一个不错的分享,铭哥,以后继续!!!
0

ztyspar

赞同来自:

和for循环的语句是一样的效果吗
0

小天

赞同来自:

预习
0

lyhabc

赞同来自:

不行啊,铭哥
0

beacon

赞同来自:


其中有句缺符号
select command in "w" "top" "free" "quit"
0

online189

赞同来自:

学习了
0

Coohx - 小运维

赞同来自:

学习了
0

zh_414

赞同来自:

学习了。很不错{:7_212:}
0

Kry1702

赞同来自:

实际上就是做菜单吧。。
0

标哥

赞同来自:

学习了. selet  变量名 in  命令1 命令2 命令3
0

标哥

赞同来自:

学习了  
selet  变量名 in  命令1 命令2 命令3
do
      case  $变量名 in
       w)
  

       *)
         ;;
     esac
done

命令的顺序 与case 的顺序对应起来. 这点要注意....

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: