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 提供了declare和typeset兩個命令用於指定變量的類型。
間接變量引用
如果第一個變量的值是第二個的名字,從第一個變量引用第二個變量的值就稱為間接變量引用。
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
