select 與case 以及函數練習

select與case:bash


格式:ide


select variable in list函數

doui

循環體命令spa

donerest


例1:input

   

#!/bin/bashit

PS3="what do you want: "class

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

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



練習:

一、寫一個服務腳本/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)

        exit

        ;;

*)

        echo "you input is worry"

esac

done

相關文章
相關標籤/搜索