码迷,mamicode.com
首页 > 其他好文 > 详细

select 与case 以及函数练习

时间:2016-08-22 00:35:11      阅读:154      评论:0      收藏:0      [点我收藏+]

标签: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://zebra930.blog.51cto.com/11736340/1840907

select 与case 以及函数练习

标签:select case 函数

原文地址:http://zebra930.blog.51cto.com/11736340/1840907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!