select与case组合循环

select与case:

格式:

select variable in list

do

循环体命令

done

例1:

   

#!/bin/bash

PS3="what do you want: "

select i in a b c d         #在例2中省略的部分

do

        case $i in

        a)

        echo aa

        break                 #break是退出循环

        ;;

        b)

        echo bb

        break

        ;;

        c)

        echo cc

        break

        ;;

        d)

        echo dd

        break

        esac

done

结果:

[root@localhost bin]# ./select.sh

1) a

2) b

3) c

4) d

what do you want: 2

bb

select 循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3 提示符,等待用户输入

用户输入菜单列表中的某个数字,执行相应的命令。

用户输入被保存在内置变量REPLY 中。

select 是个无限循环,因此要记住用break 命令退出循环,或用exit 命令终止脚本。也可以按ctrl+c 退出循环。

select 经常和case 联合使用。

与for 循环类似,可以省略in list ,此时使用位置参量。

  return可以结束函数,此刻函数中的变量也被终止。



例1也可以写成例2的形式

例2

#!/bin/bash

PS3="what do you want: "

select i

do

        case $i in

        a)

        echo aa

        break

        ;;

        b)

        echo bb

        break

        ;;

        c)

        echo cc

        break

        ;;

        d)

        echo dd

        break

        esac

done

结果:

[root@localhost bin]# ./select1.sh a b c         #与例1相比,这里需要写参数

1) a

2) b

3) c

what do you want: 3

cc

练习:

1、写一个服务脚本/root/bin/testsrv.sh,完成如下要求

(1) 脚本可接受参数:start, stop, restart, status

(2) 如果参数非此四者之一,提示使用格式后报错退出

(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”

考虑:如果事先已经启动过一次,该如何处理?

(4) 如是stop:则删除/var/lock/subsys/SCRIPT_NAME, 并显示“停止完成”

考虑:如果事先已然停止过了,该如何处理?

(5) 如是restart,则先stop, 再start

考虑:如果本来没有start,如何处理?

(6) 如是status, 则如果/var/lock/subsys/SCRIPT_NAME文件存在,则显示“SCRIPT_NAMEis running…”

如果/var/lock/subsys/SCRIPT_NAME文件不存在,则显示“SCRIPT_NAME is stopped…”

其中:SCRIPT_NAME为当前脚本名

#/bin/bash

read -p "which service :" name

basename=`basename $name`

dirname=`dirname $name`

start () {

        if [ -f $name ] ; then

            echo "$basename is running"

        else

            touch $name

            echo "$basename starting success"

        fi

}

stop () {

        if [ -f $name ] ; then

            rm -f $name

            echo "$basename stopping"

        else

            echo "$basename does not work"

        fi

}

restart() {

        stop

        start

}

status() {

        if [ -f $name ] ; then

            echo "$basename is running" 

        else

            echo "$basename is stopped"

        fi

}

PS3="you can choose num: "

select i in start restart stop status quit

do

case $i in

start)

        start

#       break

        ;;

stop)

        stop

#       break

        ;;

restart)

        restart

#       break

        ;;

status)

        status

#       break

        ;;

quit|q|Q)

        exit

        ;;

esac

done

原创文章,作者:zebra930,如若转载,请注明出处:http://www.178linux.com/38683

赞 (0)
zebra930zebra930
上一篇 2016-08-22 08:44
下一篇 2016-08-22 08:44

相关推荐

  • Linux的启动流程

    启动流程  POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。 ROM: BIOS, Basic Input and Output System,保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、 …

    Linux干货 2016-09-13
  • ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能

    ☞CentOS安装程序{ 源码包安装;rpm包安装;}&&恢复rpm功能 本文是继上一篇文章“CentOS程序安装的3种方式{ 源码包安装 | rpm包安装 | yum安装;}”的补充,上篇文章http://www.178linux.com/38812主要介绍了yum安装软件的方法以及归纳了详细的yum命令。本文继续介绍基于本地file、远程…

    Linux干货 2016-08-24
  • 第5周

    第5周 1.显示当前系统上root,fedora或user1用户的默认shell。 [root@node1 ~]# grep -E “^(root|fedora|user1)\>” /etc/passwd | cut -d: -f 7 /bin/bash /bin/bash /bin/bash [root@node1 ~]# grep “^\(root…

    Linux干货 2017-07-27
  • 初学Linux

       已经学习了Linux一周了,从原来的设计网页、动画影视制作、3D模型到现在的黑白界面虚拟世界,从原来吃睡由我到现在重回高三生活,说实话,一开始还是不太能适应的,尤其是眼睛,酸胀痛。不过,越努力越幸运,也觉得linux其实很有意思。。以下是我第一篇微博的内容,也是我学习linux一周所总结的知识。 首先,学习一门知识就要先了解他的历史…

    Linux干货 2017-07-15
  • ◆战前宣言

    从 今 天 开 始, 到 以 后 的 很 久,我 要 努 力,努 力,努 力 的 用 尽 全 力 地 学 好 Linux。 我 知 道,这 起 码 需 要 很 长 时 间 和 汗 水,但 我 坚 信,付 出 总 是 会 有 回 报 的~ 要记住:比你优秀的人都在努力,你还在彷徨什么? 最后借用一下火影忍者中李…

    Linux干货 2016-10-24
  • Linux入门之文本处理三剑客之grep

    Linux入门之文本处理三剑客之grep  文本处理工具:  grep,sed(流编辑器),awk    grep简述及特点 简介:全局搜索正则表达式出来的行并打印 (Global search REgular expression and Print out  the line),一种按照特定模式(patt…

    Linux干货 2016-08-07