SHELL編程中,當要引用到多個值的時候,一個一個地進行變量賦值會讓我們的腳本變得繁瑣,不利于代碼的優化,所以,就需要通過數組進行定義,優化代碼,減少不必要的定義和命令操作。
SHELL中的數組:存儲多個元素的連續內存空間
數組名:整個屬組只有一個名字
數組索引: 編號從0開始
數組名[索引]
${array_name[index]}
注:bash-4及之后的版本,支持自定義索引,而不僅僅是0,1,2,3.。。數字格式
此類屬組稱之為”關聯數組”
聲明數組:
Declare -a 聲明一個索引數組
-A 聲明一個關聯數組
數組中元素賦值方式
1.一次只賦值一個元素
Array_name[index]=value
直接引用數組名,顯示第一個元素
2. 一次賦值全部元素
Array_name=(“val1” “val2” “val3” …)
3.只賦值特定元素
Array_name=([1]=”val1” [3]=”val2” …)
稀疏格式的屬組
4. read –a array
引用數組中的元素:${array_name[index]}
引用時,只給數組名,表示引用下標為0的元素
${array_name[*]/[@]}引用數組中的所有元素
數組長度(數組中元素個數)
${#array_name}
${#array_name[*]/[@]}
$(#array_name)不加[]表示顯示屬組中第一個元素的長度
Declare –A 聲明關聯數組
引用數組中所有元素
${array_name[*]/[@]}
數組元素切片:${array_name[@]:offset:number}
Offset 要跳過的元素個數
Number: 要取出的元素個數,省略number,表示取偏移量后面的所有元素
向非稀疏格式數組中追加元素
Array_name[${#array_name[*]}]=
刪除數組中某個元素
Unset array_name[index]
關聯數組
Declare –A array_name
Array_name=([index_name1]=”val1” [index_name2]=”val2” …)
Bash的內置字符串處理工具
字符串切片:
${var:offset:number}
取字符串子串
${var: -4} 有空格
取字符串的最右側的幾個字符 冒號后面有一個空白字符
基于模式取子串
${var#*word} word是指遞歸的分隔符,功能:自左而右,查找var變量所存儲的字符串第一次出現word的分隔符,刪除字符串開頭至此分隔符之間的所有字符
${var##*word} word是指遞歸的分隔符,功能:自左而右,查找var變量所存儲的字符串直到最后一次出現word的分隔符,刪除字符串開頭至此分隔符之間的所有字符
mypath=”/etc/init.d/functions”
echo ${mypath##*/}: functions
echo ${mypath#*/}: etc/init.d/functions
${var%word*} : word是指遞歸的分隔符,功能:自右而左,查找var變量所存儲的字符串直到第一次出現word的分隔符,刪除此分隔符至字符串尾部之間的所有字符
${var%%word*}: word是指遞歸的分隔符,功能:自右而左,查找var變量所存儲的字符串直到最后一次出現word的分隔符,刪除此分隔符至字符串尾部之間的所有字符
mypath=”/etc/init.d/functions”
${mypath%/*}: /etc/init.d
查找替換:
${var/pattern/substi}:查找var所表示的字符串,第一次被pattern所匹配的字符串替換為substi字符串
${var//pattern/substi}:查找var所表示的字符串,所有被pattern所匹配字符串替換為substi字符串
${var/#pattern/substi}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,替換為substi字符串
${var/%pattern/substi}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,替換為substi字符串
注意:pattern中使用glob風格的通配符
查找刪除
${var/pattern}: 以pattern查找為模式,查找var字符串中第一次的匹配,并刪除值
${var//pattern}:以pattern查找為模式,查找var字符串中所有的匹配,并刪除值
${var/#pattern}:以pattern查找為模式,查找var字符串中行首第一次匹配,并刪除值
${var/%pattern}:以pattern查找為模式,查找var字符串中行尾第一次匹配,并刪除值
大小寫轉換
${var^^} 把var中所有小寫字符轉換為大寫
${var,,} 把var中所有大寫轉換為小寫
變量賦值
${var:-value} 如果var變量為空,或未設置,那么返回為value, var不為空,則返回var
${var:=value} 如果var變量為空,或未設置,那么返回為value,并將value賦值給var變量, var不為空,則返回var
${var:+value} 如果var變量為不為空,那么返回為value
${var:?ERROR_INFO} 如果var為空,或未設置,那么返回ERROR_INFO為錯誤提示,否則返回var的值
Declare 變量聲明
-i 聲明為數值類型 declare -i a=awed 則a的值變為0
-r 聲明為只讀變量 declare -r a=hello
-a 聲明為普通數組 declare -a a a[0]=value 索引默認從0開始的數字
-A 聲明為關聯數組 declare -A a a[a]=value 索引可以自己指定
-f 查看聲明的函數及內容 declare –f
-F 查看聲明的函數名 declare -F
-l 將聲明的變量字符全轉化為大寫 declare –l a=XYZ 則a的值為xyz
-u將生命的變量字符全轉化為小寫 declare –u a=xyz 則a的值為XYZ
echo ${a^^} 將數組中的小寫全轉化為大寫
echo ${a,,} 將數組中的大寫全轉化為小寫
YUM軟件包管理
YUM(Yellowdog Update Modifer),rpm的前端程序,用來解決程序的依賴性,可以在多個庫之間定位軟件包。
搜索:
search string1 [string2]…
以指定的關鍵字搜索程序包名及summary信息
查看指定包所依賴的capability
deplist package1 [package2]…
查看yum事物歷史
history [info|list|package-list|package-info|summary|addon-info|undo|rollback|new|sync|stats]
軟件包組管理
groupinstall group1 [group2]…
groupupdate group1 [group2]…
grouplist [hidden] …
groupremove group1 [group2]…
groupinfo group1 [group2]…
YUM的命令行選項
–nogpgcheck 禁止gpg檢查
-y 默認回答yes
-q 靜默模式
–disablerepo=repoidglob 臨時禁止此處指定的repo
–enablerepo=repoidglob 臨時啟用此處指定的repo
–noplugins 禁止所有插件
程序包編譯
程序包編譯安裝:
Application-Version-release.src.rpm安裝后,使用rpmbuild命令制作成二進制格式的rpm包,而后再安裝
源代碼–>預處理–>編譯–>匯編–>鏈接–>執行
C代碼編譯安裝三步驟
1. ./configure
1)通過選項傳遞參數,指定啟用特性,安裝路徑等,執行時會參考用戶的指定以及makefile.in文件生成makefile
2)檢查依賴到的外部環境
2. make 根據makefile文件構建應用程序
3. make install 復制文件到相應路徑
注意:安裝前查看install readme文件,獲取相關信息
源碼安裝http服務
1.先從ftp服務器上下載相應要安裝的源碼包
2.解壓縮源碼包
、
3.編譯安裝前先查看其install和readme文檔,獲取相關信息
4. ./configure –help可以獲取相關選項的參數
5. ./configure編譯 –prefix指定安裝路徑
6 make
7 make install
8 編譯安裝完成后,可以查看相應安裝的文件
9 將編譯的程序導入到環境變量中
10 將程序使用的庫文件導入到庫中,ldconfig重新加載庫緩存
11 導入頭文件
12 導入幫助文件
13 啟動服務
14 訪問ip對應80端口 如links
緊急模式恢復受損的kernel文件
1.查看kernel版本信息
2.rpm -e kernel –nodeps 進入救援模式
3 查看分區掛在情況
4 rpm -ivh /run/install/repo/Packages/kerner*.rpm –root=/mnt/sysimage
5 重啟
輸入若干個數值存入數組中,采用冒泡算法進行升序或降序排序
原創文章,作者:Stupid_L,如若轉載,請注明出處:http://www.www58058.com/39280