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
posted on 2015-12-31 16:51  Rohero  阅读(117)  评论(0编辑  收藏  举报