數組:
程序=指令+數據 指令: 數據:變量、文件
數組:存儲過個元素的連續的內存空間;
變量:存儲單個元素的內存空間;
數組名:整個數組只有一個名字; 數組索引:編號從0開始; 數組名[索引], ${ARRAY_NAME[INDEX]} 注意:bash-4及之后的版本,支持自定義索引格式,而不僅僅是0,1,2 ...數字格式;此類數組稱之為“關聯數組”
聲明數組:
如果往一個變量里邊指定多個元素,如果沒有聲明為數組,只不過是當成多個元素的的那個字符串,declare -a NAME :聲明索引數組declare -A NAME:聲明關聯數組
數組中元素的賦值方式:
(1)一次只賦值一個元素 ARRAY_NAME[INDEX]=value (2)一次賦值全部元素 ARRAY_NAME=("VAL1""VAL2""VAL3" ...) (3)只賦值特定元素; ARRAY_NAME=([0]="VAL1" [3]="VAL4" ...)
引用數組中的元素: ${ARRAY_NAME[INDEX]} ${ARRAY_NAME[*]}:引用數組中的所有元素
注意:引用時,只給數組名,表示引用下標為0的元素;
數組的長度(數組中元素的個數):
${#ARRAY_NAME[*]}${#ARRAY_NAME[@]}
示例:
生成10個隨機數,并找出其中最大值;
#!/bin/bash#declare -a randdeclare -l max=0for i in {0..9};do rand[$i]=$RANDOM echo ${rand[$i]} [ ${rand[$i]} -gt $max ] && max=${rand[$i]}doneecho "MAX:$max"[root@centous1 ~]# ./123.sh773293356870254241086732703140529551975322949MAX:32703
練習:定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的文件;統計其下標為偶數的文件中的行數之和;
#!/bin/bash#declare -a files files=(/var/log/*.log)declare -i lines=0for i in $(seq 0 $[${#files[*]}-1]);do if [ $[$i%2] -eq 0 ];then let lines+=$(wc -l ${files[$i]} | cut -d' ' -f1) fidoneecho "Lines:$lines"[root@centous1 ~]# ./lines.shLines:3153
數組元素切片:
${ARRAY_NAME[@]: offset:number} offset:要咯過的元素個數; number:要取出的元素個數;省略number時,表示取偏移量之后的所有元素;
向非稀疏數組中追加元素:
ARRAY_NAME[${#ARRAY_NAME[*]}=
刪除數組中的某元素;
unset ARRAY[INDEX]
關聯數組:
declare -A ARRAY_NAME ARRAY_NAME=([index_name1]="value" ...)
bash的內置字符串處理工具:
字符串切片:
取字符串的字串; 去字符串的最右側的幾個字符:${var: -number} 注意:冒號后邊必須有一個空白字符;
[root@centous1 ~]# name=jarry[root@centous1 ~]# echo ${name:2:2}rr [root@centous1 ~]# echo ${name:2}rry [root@centous1 ~]# echo ${name: -2}ry
基于模式取字符串;
${var#*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所儲存的字符串中,第一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所儲存的字符串中,最后一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;
[root@centous1 ~]# mypath="/etc/init.d/functions"[root@centous1 ~]# echo ${mypath#*/}etc/init.d/functions [root@centous1 ~]# echo ${mypath##*/}functions
${var%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所儲存的字符串中,第一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;
${var%%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所儲存的字符串中,最后一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;
[root@centous1 ~]# echo ${mypath%/*}/etc/init.d [root@centous1 ~]# url=http://www.magedu.com:80[root@centous1 ~]# echo ${url%%:*}http [root@centous1 ~]# echo ${url##*:}80
注意 * 的位置
查找替換:
${var/PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var//PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var/#PATTERN/SUBSTI}:查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var/%PATTERN/SUBSTI}:查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串; 注意:PATTERN中使用golb風格和通配符;
查找刪除:
${var/PATTERN}:刪除匹配到的第一個 ${var//PATTERN}:刪除全部匹配到的 ${var/%PATTERN}:刪除匹配到的尾部那一個 ${var/#PATTERN}:刪除匹配到的行首那一個
字符大小寫轉換:
${var^^}:把var中的所有轉換成大寫 ${var,,}:把var中的所有轉換成大寫
變量賦值:
${var:-value}:如果var變量為空,或未設置,那么返回VALUE;否則,返回var變量的值;${var:=value}:如果var變量為空,或未設置,那么返回VALUE;并將VALUE的值賦給var;否則,返回var變量的值;${var:+value}:如果var變量不空,則返回VALUE;${var:?ERROR_INFO}:如果var為空,或未設置,那么返回ERROR_INFO為錯誤提示;否則,返回var的值;
原創文章,作者:forest,如若轉載,請注明出處:http://www.www58058.com/39324