1. 程式人生 > >shell 函數編程

shell 函數編程

null rest already chkconfig name pre sta use one

函數語法

    語法:

    function F_NAME {
        函數體
    }

    F_NAME() {
        函數體
    }

    可調用:使用函數名
        函數名出現的地方,會被自動替換為函數;

    腳本:

    函數的返回值:
        函數的執行結果返回值:代碼的輸出
            函數中的打印語句:echo, print
            函數中調用的系統命令執行後返回的結果
        執行狀態返回值:
            函數體中最後一次執行的命令狀態結果
            自定函數執行狀態的返回值:
return # 函數可以接受參數: 在函數體中調用函數參數的方式同腳本中調用腳本參數的方式:位置參數 $1, $2, ... $#, $*, $@

簡單示例

     #!/bin/bash
        #
        # chkconfig: 2345 67 34
        #
        srvName=$(basename $0)

        lockFile=/var/lock/subsys/$srvName

        start() {
            if [ -f $lockFile ];then
            echo 
"$srvName is already running." return 1 else touch $lockFile [ $? -eq 0 ] && echo "Starting $srvName OK." return 0 fi } stop() { if [ -f $lockFile ];then rm -f $lockFile &> /dev/null [ $?
-eq 0 ] && echo "Stop $srvName OK" && return 0 else echo "$srvName is not started." return 1 fi } status() { if [ -f $lockFile ]; then echo "$srvName is running." else echo "$srvName is stopped." fi return 0 } usage() { echo "Usage: $srvName {start|stop|restart|status}" return 0 } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) status ;; *) usage exit 1 ;; esac

信號捕捉:trap COMMAND;COMMAND

    循環控制:
        continue: 提前進入下一輪循環
            用於條件語句中,僅在某些個特殊場景提前進入;
        break [n]:跳出當前循環
            用於條件語句中,

        例如:查看用戶登錄

            #!/bin/bash
            #
            read -p "Plz enter a username: " userName

            while true; do
                if who | grep "\<$userName\>" &> /dev/null; then
                    break
                fi
                echo "not here."
                sleep 5
            done

            echo "$userName is logged on."


            #!/bin/bash
            #
            read -p "Plz enter a username: " userName

            until who | grep "\<$userName\>" &> /dev/null; do
              sleep 5
              echo "not here"
            done

            echo "here"

shell 函數編程