shell腳本-高級變量

字符串變量切片

${#var}:
        返回字符串變量var的長度
    ${var:offset}:
        返回字符串變量var中從第offset個字符後(不包括第offset 個字符)的字符開始,到最後的部分,offset 的取值在0到 ${#var}-1  之間(bash4.2 後,容許爲負值)
    ${var:offset:number}:
        返回字符串變量var中從第offset個字符後(不包括第offset 個字符)的字符開始 ,長度爲number 的部分
    ${var: -length} :
        取字符串的最右側幾個字符
        注意:冒號後必須有一空白字符
    ${var:offset:-length}:
        從最左側跳過offset 字符,一直向右取到距離最右側lengh
    ${var: -length:offset} :
        先從最右側向左取到length 個字符開始,再向右取到距離最右側offset 個字符之間的內容
        注意:-length 前空格

字符串處理

基於模式取子串
    ${var#*word} :
        其中word 能夠是指定的任意字符
        功能:自左而右,查找var變量所存儲的字符串中,第一次出現的word,  刪除字符串開頭至第一次出現word 字符之間的全部字符
    ${var##*word}:
        同上,貪婪模式,不一樣的是,刪除的是字符串開頭至最後一次由word 指定的字符之間的全部內容
        示例:
            file="var/log/messages「 ${file#*/}: log/messages ${file##*/}: messages ${var%word*}: 其中word 能夠是指定的任意字符; 功能:自右而左,查找var變量所存儲的字符串中,第一次出現的word, 刪除字符串最後一個字符向左至第一次出現word 字符之間的全部字符; 示例: file="/var/log/messages" ${file%/*}: /var/log ${var%%word*}: 同上,只不過刪除字符串最右側的字符向左至最後一次出現word 字符之間的全部字符; 示例: url=http://www.magedu.com:80 ${url##*:} 80 ${url%%:*} http 查找替換 ${var/pattern/substr}: 查找var所表示的字符串中,第一次被pattern 所匹配到的字符串,以substr 替換之 ${var//pattern/substr}: 查找var所表示的字符串中,全部能被pattern 所匹配到的字符串,以substr 替換之 ${var/#pattern/substr}: 查找var所表示的字符串中,行首被pattern 所匹配到的字符串,以substr 替換之 ${var/%pattern/substr}: 查找var所表示的字符串中,行尾被pattern 所匹配到的字符串,以substr 替換之 查找並刪除 ${var/pattern} : 刪除var所表示的字符串中第一次被pattern 所匹配到的字符串 ${var//pattern}: 刪除var 所表示的字符串中全部被pattern 所匹配到的 字符串 ${var/#pattern}: 刪除var 所表示的字符串中全部以pattern 爲行首所匹配到的 字符串 ${var/%pattern}: 刪除var 所表示的字符串中全部以pattern爲 爲 行尾所 匹配到的 字符串 字符大小寫轉換 ${var^^}: 把var中的全部小寫字母轉換爲大寫 ${var,,}: 把var中的全部大寫字母轉換爲小寫 

字符串變量賦值

${var:-value} 或 ${var-value}:
        若是var爲空或未設置,那麼返回value ;不然返回var的值
    ${var:+value}:
        若是var非空,則返回value,不然返回空值
    ${var:=value}:
        若是var爲空或未設置,那麼返回value,並將value 賦值給var ;不然返回var 的值
    ${var:?error_info}:
        若是var爲空或未設置,那麼在當前終端打印error_info ;不然返回var 的值
        
    
    爲腳本程序使用配置文件, 實現變量賦值
        定義文本文件,每行定義「name=value」
        在腳本中source 此文件便可

有類型的變量

Shell 變量通常是無類型的,可是bash Shell 提供了declaretypeset兩個命令用於指定變量的類型。

間接變量引用

若是第一個變量的值是第二個的名字,從第一個變量引用第二個變量的值就稱爲間接變量引用。
    variable1 的值是variable2 ,而variable2 又是變量名,variable2 的值爲value ,
        間接變量引用是指經過variable1得到變量值value的行爲
        variable1=variable2
        variable2=value
    bash Shell 提供了兩種格式實現間接變量引用:
        eval tempvar=\$$variable1
        tempvar=${!variable1}
    示例:
        [root@server ~]# N=NAME
        [root@server ~]# NAME=wangxiaochun
        [root@server ~]# N1=${!N}
        [root@server ~]# echo $N1
        wangxiaochun
        [root@server ~]# eval N2=\$$N
        [root@server ~]# echo $N2
        wangxiaochun
相關文章
相關標籤/搜索