declare -a ARRAY_NAME centos
declare -A ARRAY_NAME: 關聯數組 數組
注意:二者不可相互轉換 bash
索引:編號從0開始,屬於數值索引 ide
注意:索引可支持使用自定義的格式,而不只是數值格式,即爲關聯索引, bash4.0版本以後開始支持 ui
bash的數組支持稀疏格式(索引不連續) centos7
(1) 一次只賦值一個元素 spa
ARRAY_NAME[INDEX]=VALUE weekdays[0]="Sunday" weekdays[4]="Thursday" 命令行
(2) 一次賦值所有元素 code
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...) blog
1 filename=(`ls /root/*.sh`) 2 3 echo ${filename[@]} 4 /root/99.sh /root/a.sh /root/b.sh /root/caluid.sh /root/creat10user.sh /root/diskcheck.sh /root/g1.sh /root/getuserinfo.sh /root/guess.sh /root/selectmenu.sh /root/shift.sh /root/testfor.sh /root/trap.sh /root/whiledf.sh
(3) 只賦值特定元素
ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)
(4) 交互式數組值對賦值 read -a ARRAY
${ARRAY_NAME[INDEX]} 注意:省略[INDEX]表示引用下標爲0的元素
引用數組全部元素:
${ARRAY_NAME[*]} ${ARRAY_NAME[@]}
數組的長度(數組中元素的個數):
${#ARRAY_NAME[*]} ${#ARRAY_NAME[@]}
刪除數組中的某元素: 致使稀疏格式 unset ARRAY[INDEX]
刪除整個數組: unset ARRAY
引用數組中的元素:
數組切片:${ARRAY[@]:offset:number}
offset: 要跳過的元素個數
number: 要取出的元素個數 取偏移量以後的全部元素 ${ARRAY[@]:offset}
向數組中追加元素: ARRAY[${#ARRAY[*]}]=value
字符串切片的示例
1 [root@centos7 ~]# str=`echo {a..z}|tr -d " "` 2 [root@centos7 ~]# echo $str 3 abcdefghijklmnopqrstuvwxyz 4 [root@centos7 ~]# str2=`echo {a..z}` 5 [root@centos7 ~]# echo $str2 6 a b c d e f g h i j k l m n o p q r s t u v w x y z 7 [root@centos7 ~]# echo ${#str} 8 26 9 [root@centos7 ~]# echo ${#str2} 10 51 11 [root@centos7 ~]# echo ${str:3} 12 defghijklmnopqrstuvwxyz 13 [root@centos7 ~]# echo ${str:3:4} 14 defg 15 [root@centos7 ~]# echo ${str: -4} 16 wxyz 17 [root@centos7 ~]# echo ${str: -4:-2} 18 wx 19 [root@centos7 ~]# echo ${str: -4:1} 20 w 21 [root@centos7 ~]# echo ${str: -4:3} 22 wxy
字符串模式取子字符串
1 [root@centos7 ~]# line=`head -n1 /etc/passwd` 2 [root@centos7 ~]# echo $line 3 root:x:0:0:root:/root:/bin/bash 4 [root@centos7 ~]# echo ${line#*:} 5 x:0:0:root:/root:/bin/bash 6 [root@centos7 ~]# echo ${line##*:} 7 /bin/bash 8 [root@centos7 ~]# echo ${line%*:} 9 root:x:0:0:root:/root:/bin/bash 10 [root@centos7 ~]# echo ${line%:*} 11 root:x:0:0:root:/root 12 [root@centos7 ~]# echo ${line%%:*} 13 root 14 [root@centos7 ~]# disk="/dev/sda3 30G 82M 30G 1% /data" 15 [root@centos7 ~]# echo $disk 16 /dev/sda3 30G 82M 30G 1% /data 17 [root@centos7 ~]# echo ${disk%% *} 18 /dev/sda3 19 [root@centos7 ~]#
字符串的搜索替代
${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中的全部大寫字母轉換爲小寫
eval 首先會掃描替換命令中的全部變量,而後再去執行替換後的命令
eval 命令將會首先掃描命令行進行全部的置換,而後再執行該命令.該命令適用於那些一次掃描沒法實現其功能的變量.該命令對變量進行兩次掃描
1 [root@centos7 ~]# n=10 2 [root@centos7 ~]# echo {1..$n} 3 {1..10} 4 [root@centos7 ~]# eval echo {1..$n} 5 1 2 3 4 5 6 7 8 9 10 6 [root@centos7 ~]# CMD=whoami 7 [root@centos7 ~]# echo $CMD 8 whoami 9 [root@centos7 ~]# eval $CMD 10 root 11 [root@centos7 ~]#