一、數(shù)組(array)
1.變量:存儲單個元素的內(nèi)存空間;
2.數(shù)組:存儲多個元素的連續(xù)的內(nèi)存空間海渊,相當于多個變量的集合;
3.數(shù)組名和索引(下標)
索引:編號從0開始哲鸳,屬于數(shù)值索引臣疑;
注意:索引可支持使用自定義的格式,而不僅是數(shù)值格式徙菠,即為關(guān)聯(lián)索引讯沈,bash4.0版本之后開始支持;
bash --version 查看bash版本
例如:自定義索引為字母和單詞(first)懒豹;
bash的數(shù)組支持稀疏格式(索引不連續(xù))芙盘;
4.聲明數(shù)組
declare -a ARRAY_NAME(數(shù)組名)
declare -A ARRAY_NAME: 關(guān)聯(lián)數(shù)組(必須先聲明數(shù)組)
注意:兩者不可相互轉(zhuǎn)換
臨時生效(exit)驯用;先聲明,再使用儒老;
二蝴乔、數(shù)組賦值
1.數(shù)組元素的賦值
(1) 一次只賦值一個元素;
ARRAY_NAME[INDEX]=VALUE
weekdays[0]="Sunday"
weekdays[4]="Thursday"
echo ${weekdays[0]} 顯示數(shù)組的某個元素
echo ${weekdays[4]}
unset weekdays[0] 刪除數(shù)組中的某個索引
unset weekdays 刪除數(shù)組中的全部索引
引號作用:"a_b"這個形式必須加引號驮樊;
(2) 一次賦值全部元素:
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
(3) 只賦值特定元素:
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 交互式數(shù)組值對賦值
read -a ARRAY
(5)花樣賦值
alpha=({a..z})
alpha=({1..10..2})
filename=(/app/bin/*.sh)
filename=(f{1..6}.{log,txt})
(6)顯示所有數(shù)組: declare -a
2.引用數(shù)組
(1)引用數(shù)組元素:
${ARRAY_NAME[INDEX]}
注意:省略[INDEX]表示引用下標為0的元素
echo ${ARRAY_NAME}
(2)引用數(shù)組所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
(3)數(shù)組的長度(數(shù)組中元素的個數(shù)):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
(4)刪除數(shù)組中的某元素:導致稀疏格式
unset ARRAY[INDEX]
(5)刪除整個數(shù)組:
unset ARRAY
三薇正、數(shù)組數(shù)據(jù)的處理
1.引用數(shù)組中的元素:
數(shù)組切片:${ARRAY[@]:offset:number}
offset: 要跳過的元素個數(shù)
number: 要取出的元素個數(shù)
取偏移量之后的所有元素${ARRAY[@]:offset}
2.向數(shù)組中追加元素:
ARRAY[${#ARRAY[*]}]=value
索引號=數(shù)組元素個數(shù)
3.關(guān)聯(lián)數(shù)組:
declare -A ARRAY_NAME
ARRAY_NAME=([idx_name1]='val1' [idx_name2]='val2‘...)
注意:關(guān)聯(lián)數(shù)組必須先聲明再調(diào)用
四、字符串
1.字符串切片
${#var}:返回字符串變量var的長度
${var:offset}:返回字符串變量var中從第offset個字符后(不包括第offset個字符)的字符開始囚衔,到最后的部分挖腰,offset的取值在0 到${#var}-1 之間(bash4.2后,允許為負值)
${var:offset:number}:返回字符串變量var中從第offset個字符后(不包括第offset個字符)的字符開始练湿,長度為number的部分
${var: -length}:取字符串的最右側(cè)幾個字符
注意:冒號后必須有一個空白字符
${var:offset:-length}:從最左側(cè)跳過offset字符猴仑,一直向右取到距離最右側(cè)lengh個字符之前的內(nèi)容
${var: -length:-offset}:先從最右側(cè)向左取到length個字符開始,再向右取到距離最右側(cè)offset個字符之間的內(nèi)容
注意:-length前空格
2.字符串處理
基于模式取子串
(1) ${var#*word}:其中word可以是指定的任意字符
功能:自左而右肥哎,查找var變量所存儲的字符串中辽俗,第一次出現(xiàn)的word, 刪除字符串開頭至第一次出現(xiàn)word字符之間的所有字符
(2) ${var##*word}:同上,貪婪模式篡诽,不同的是崖飘,刪除的是字符串開頭至最后一次由word指定的字符之間的所有內(nèi)容
示例:
file="var/log/messages“
${file#*/}: log/messages
${file##*/}: messages
(3) ${var%word*}:其中word可以是指定的任意字符;
功能:自右而左杈女,查找var變量所存儲的字符串中朱浴,第一次出現(xiàn)的word, 刪除字符串最后一個字符向左至第一次出現(xiàn)word字符之間的所有字符;
file="/var/log/messages"
${file%/*}: /var/log
(4) ${var%%word*}:同上达椰,只不過刪除字符串最右側(cè)的字符向左至最后一次出現(xiàn)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為行尾所匹配到的字符串
字符大小寫轉(zhuǎn)換
${var^^}:把var中的所有小寫字母轉(zhuǎn)換為大寫
${var,,}:把var中的所有大寫字母轉(zhuǎn)換為小寫
五、變量賦值
(1) ${var:-value} 或${var-value}:如果var為空或未設置啃憎,那么返回value芝囤;否則返回var的值
(2) ${var:+value}:如果var非空,則返回value,否則返回空值
(3) ${var:=value}:如果var為空或未設置悯姊,那么返回value羡藐,并將value賦值給var;否則返回var的值
(4) ${var:?error_info}:如果var為空或未設置悯许,那么在當前終端打印error_info仆嗦;否則返回var的值
為腳本程序使用配置文件,實現(xiàn)變量賦值
(1) 定義文本文件,每行定義“name=value”
單獨創(chuàng)建一個文本文件先壕,統(tǒng)一從一個文件中調(diào)用變量瘩扼;
不同業(yè)務,可以定義不同的腳本文件垃僚;
(2) 在腳本中source此文件即可
六集绰、高級變量用法-有類型變量
Shell變量一般是無類型的,但是bash Shell提供了declare和typeset兩個命令用于指定變量的類型谆棺,兩個命令是等價的栽燕;
declare [選項] 變量名
-r 聲明或顯示只讀變量
-i 將變量定義為整型數(shù)
-a 將變量定義為數(shù)組
-A 將變量定義為關(guān)聯(lián)數(shù)組
-f 顯示此腳本前定義過的所有函數(shù)名及其內(nèi)容
-F 僅顯示此腳本前定義過的所有函數(shù)名
-x 聲明或顯示環(huán)境變量和函數(shù)
-l 聲明變量為小寫字母 declare –l var=UPPER
-u 聲明變量為大寫字母 declare –u var=lower
七、eval命令
eval命令將會首先掃描命令行進行所有的置換包券,然后再執(zhí)行該命令纫谅。
該命令適用于那些一次掃描無法實現(xiàn)其功能的變量,該命令對變量進行兩次掃描溅固;
如果第一個變量的值是第二個變量的名字,從第一個變量引用第二個變量的值就稱為間接變量引用兰珍;
variable1的值是variable2侍郭,而variable2又是變量名,variable2的值為value掠河,間接變量引用是指通過variable1獲得變量值value的行為亮元;
variable1=variable2
variable2=value
bash Shell 提供了兩種格式實現(xiàn)間接變量引用
eval tempvar=\$$variable1
tempvar=${!variable1}
八、創(chuàng)建臨時文件
mktemp命令:創(chuàng)建并顯示臨時文件唠摹,可避免沖突
mktemp [OPTION]... [TEMPLATE]
TEMPLATE: filename.XXX
X(大寫)至少要出現(xiàn)三個爆捞;
OPTION:
-d: 創(chuàng)建臨時目錄
-p DIR或--tmpdir=DIR:指明臨時文件所存放目錄位置
九、安裝復制文件
install命令:
install [OPTION]... [-T] SOURCE DEST 單文件
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...創(chuàng)建空目錄
選項:
-m MODE勾拉,默認755
-o OWNER
-g GROUP