SHELL開發時常用函數

    版本為 22:40, 20 Nov 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    函數開發技巧與一些很實用的函數範例

    ip 驗證

    # Test an IP address for validity:
    # Usage:
    #      valid_ip IP_ADDRESS
    #      if [[ $? -eq 0 ]]; then echo good; else echo bad; fi
    #   OR
    #      if valid_ip IP_ADDRESS; then echo good; else echo bad; fi
    #
    function is_ip()
    {
        local  ip=$1
        local  stat=1
    
        if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
            OIFS=$IFS
            IFS='.'
            ip=($ip)
            IFS=$OIFS
            [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
                && ${ip[2]} -le 255 && ${ip[3]} -le 255 ]]
            stat=$?
        fi
        return $stat
    }
    

    分割線(自動調整寬度)

    CL () { 
    WORDS=$@; termwidth="$(tput cols)"; padding="$(printf '%0.1s' ={1..500})"; printf '%*.*s %s %*.*s\n' 0 "$(((termwidth-2-${#WORDS})/2))" "$padding" "$WORDS" 0 "$(((termwidth-1-${#WORDS})/2))" "$padding"; 
    }
    
    CL "This is Seperator Line"
    

    大小寫轉換

    ToUpper() {
        echo $1 | tr "[:lower:]" "[:upper:]"
    }
    
    ToLower() {
        echo $1 tr "[:upper:]"} "[:lower:]"
    } 
    

    URL 字串編碼

    function urlencode() {
        local data
        if [[ $# != 1 ]]; then
            echo "Error: No string to urlencode"
            return 1
        fi
        data="$(curl -s -o /dev/null -w %{url_effective} --get --data-urlencode "$1" "")"
        if [[ $? != 3 ]]; then
            echo "Unexpected error" 1>&2
        else
            echo "${data##/?}"
        fi
        return 0
    }
    
    urlencode "$1"
    
    function urldecode() {
        # urldecode <string>
    
        local url_encoded="${1//+/ }"
        printf '%b' "${url_encoded//%/\\x}"
    }
    

    函數回傳字串

    Example-1: Using Global Variable

    function F1()
    {
        retval='I like programming'
    }
    
    retval='I hate programming'
    echo $retval
    F1
    echo $retval
    

    Example-2: Using Function Command

    function F2()
    {
        local  retval='Using BASH Function'
        echo "$retval"
    }
    
    getval=$(F2)   
    echo $getval
    

    Example-3: Using Variable

    function F3()
    {
        local arg1=$1
        
        if [[ $arg1 != "" ]]; 
        then
            retval="BASH function with variable"
        else
            echo "No Argument"
        fi
    }
    
    getval1="Bash Function"
    F3 $getval1
    echo $retval
    getval2=$(F3)
    echo $getval2
    

    is_root

    用途:檢查是否以 root 帳號執行

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    check_os

    用途:檢查 OS 版本

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    Check_Myself

    用途:檢查自身程序是否已經執行中,如果有,程序立即跳離,可避免同一個 script 重複被執行。

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    getopts 指令參數

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    Pause 暫停

    用法: pause

    可用於程式開發及偵錯

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    Log 訊息

    log() {  # classic logger
        local prefix="[$(date +%Y/%m/%d\ %H:%M:%S)]: "
        echo "${prefix} $@" >&2
    } 
    
    log "INFO" "a message"
    

    Error 錯誤訊息

    用途:輸出錯誤訊息

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)
    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)

    詢問 Yes/No

    用法: getyn "Would you like to install WANPIPE now? [y]"

    $NONINTERACTIVE  如果程式執行時,不想讓 user 做任何的輸入時,可以為 1
    NONINTERACTIVE=1 ,或者 = 空白,以顯示相關的提示訊息

    reference to undefined name 'syntax' Exception of type 'MindTouch.Deki.Script.Runtime.DekiScriptUndefinedNameException' was thrown. (click for details)
    Powered by MindTouch Core