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.www58058.com/38683

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

相關推薦

  • linux軟鏈接與硬鏈接的區別

    硬鏈接:相于當給文件增加了一個新名 在添加鏈接時會增加鏈接數,其inode結點數不會增加 支持絕對路徑與相對路徑 硬鏈接不能對目錄來創建 不能跨分區來創建鏈接 硬鏈接鏈接到文件被刪除時,依舊可以通過鏈接文件來訪問被刪文件的數據 軟鏈接:可以支持對目錄來創建鏈接 (注,當你用rm -rf 刪除目錄的時候,目錄不會刪除,但目錄中的內容會被刪除,并且會刪除源文件)…

    Linux干貨 2016-10-02
  • Samba服務

    一 服務端配置 1 安裝所需軟件 [root@centos7 ~]# yum install samba samba-common -y samba主要提供SMB服務所需的各項服務程序、相關的文件及其他和Samba相關的設置等 samba-common提供服務端和客戶端都會用的的數據,包括主配置文件、語法檢查等 2 添加Samba用戶 添加smb1、smb2…

    Linux干貨 2017-06-13
  • 8月9日sed命令

    sed命令及vim基礎使用命令 處理文本的工具sed stream editor,行編輯器    sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有…

    Linux干貨 2016-08-11
  • FTP部署及簡單應用

    文件服務: ftp:應用層,C/S,文件共享;file transfer protocol; nfs,cifs:文件系統接口,網絡文件系統;     nfs:network file system     cifs:common …

    Linux干貨 2016-10-19
  • N22-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -r /etc/skel /home/tuser1 # chmod 700 /home/tuser1 2、編輯/etc/group文件,添加組h…

    Linux干貨 2016-09-06
  • 第十九周作業

    1、描述Tomcat的架構; 核心架構圖: 架構簡介: Server是管理Service接口的,是Tomcat的一個頂級容器。管理著多個Service; Service 是服務,管理著一個Container和多個Connector,Service的存在依賴于Server; Container : 一個或者多個Container 可以對應一個Connector…

    2017-06-23
欧美性久久久久