對文本處理,單獨用shell來處理還是比較薄弱。所以shell就引用了awk and sed這兩個命令。我們今天不說這個
一 字符串
字符串是shell編程中最常用最有用的數據類型,因為你定義一個變量,存的值就是一個字符串,字符串可以用單引號,也可以用雙引號,也可以不用引號
A=1 name="lottu" feel='happy'
說下字符串的處理
1. 拼接字符串 echo "${name} feels ${feel}" #即空格就是字符串拼接
2. 求字符串長度 echo ${#name} echo `expr length $name` echo ${name} | awk '{print length($0)}' #awk里面擁有豐富的函數,所以可以完全借鑒於它。
3.截取字符串 echo ${name:1:4} #輸出ottu。下標是從0開始;這跟其他語言不一樣。 expr substr "$name" 1 4 echo ${name}|awk '{print substr($0,2,4)}' #輸出為ottu。
4. index檢索子串--返回第一次出現的位置;若找不到,則返回1 expr index "$name" lo
5. match匹配子串 --返回匹配到子串的長度;若找不到,則返回0 expr match "$name" lott #返回4
6. 替換子串${string/substring/replacement}表示僅替換一次substring相配字符,而${string//substring/replacement}表示為替換所有的substring相配的子串 str="you and me,go your home.OK? you" echo ${str/you/tom} echo ${str//you/tom}
總結:靈活運用命令expr,以上實現效果都可以用awk來實現。本人對awk很熟悉;大家有什么文本處理的問題,可以找我。
二 數組
bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於0
1. 定義數組 在Shell中,用括號來表示數組,數組元素用“空格”符號分割開。定義數組的一般形式為: array_name=(value1 ... valuen) vname=("lottu" "li0924" "0924" "tom") 2. 打印數組值 echo ${vname[2]} #輸出"0924" ;大家理解?因為shell數組的下標是從0開始。 使用使用@ 或 * 可以獲取數組中的所有元素 echo ${vname[@]} or echo ${vname[*]} 3.獲取數組長度 其實跟字符串長度差不多 echo ${#vname[*]} #輸出為4;數組的個數 求數組某個下標的值的長度 echo ${#vname[1]} #輸出為6 4. 刪除數組 unset命令 unset varray_name[n] :刪除第n+1個 unset varray_name 刪除數組 varray_name 5. 獲取部分數組--格式:${數組名[@或*]:起始位置:長度} $ vname=("lottu" "li0924" "0924" "tom") $ echo ${vname[*]:0:2} lottu li0924 6. 擴展read 命令來定義數組使用參數a $ read -p "please input your number: " -a num please input your number: 1 5 6 8 $ echo ${num[*]} 1 5 6 8