標籤:var 替代 roo 圖片 png /etc sel 變數賦值 ide
數組 聲明數組
declare -a ARRAY_NAME
declare -A ARRAY_NAME: 關聯陣列
注意:兩者不可相互轉換
數組名和下標(索引)
索引:編號從0開始,屬於數值索引
注意:索引可支援使用自訂的格式,而不僅是數值格式,即為關聯索引, bash4.0版本之後開始支援
bash的數組支援稀疏格式(索引不連續)
數組賦值
(1) 一次只賦值一個元素
ARRAY_NAME[INDEX]=VALUE weekdays[0]="Sunday" weekdays[4]="Thursday"
(2) 一次賦值全部元素
ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)
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
View Code
(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 [[email protected] ~]# str=`echo {a..z}|tr -d " "` 2 [[email protected] ~]# echo $str 3 abcdefghijklmnopqrstuvwxyz 4 [[email protected] ~]# str2=`echo {a..z}` 5 [[email protected] ~]# 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 [[email protected] ~]# echo ${#str} 8 26 9 [[email protected] ~]# echo ${#str2}10 5111 [[email protected] ~]# echo ${str:3}12 defghijklmnopqrstuvwxyz13 [[email protected] ~]# echo ${str:3:4}14 defg15 [[email protected] ~]# echo ${str: -4}16 wxyz17 [[email protected] ~]# echo ${str: -4:-2}18 wx19 [[email protected] ~]# echo ${str: -4:1}20 w21 [[email protected] ~]# echo ${str: -4:3}22 wxy
View Code
字串模式取子字串
1 [[email protected] ~]# line=`head -n1 /etc/passwd` 2 [[email protected] ~]# echo $line 3 root:x:0:0:root:/root:/bin/bash 4 [[email protected] ~]# echo ${line#*:} 5 x:0:0:root:/root:/bin/bash 6 [[email protected] ~]# echo ${line##*:} 7 /bin/bash 8 [[email protected] ~]# echo ${line%*:} 9 root:x:0:0:root:/root:/bin/bash10 [[email protected] ~]# echo ${line%:*}11 root:x:0:0:root:/root12 [[email protected] ~]# echo ${line%%:*}13 root14 [[email protected] ~]# disk="/dev/sda3 30G 82M 30G 1% /data"15 [[email protected] ~]# echo $disk16 /dev/sda3 30G 82M 30G 1% /data17 [[email protected] ~]# echo ${disk%% *}18 /dev/sda319 [[email protected] ~]#
View Code
字串的搜尋替代
${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 首先會掃描替換命令中的所有變數,然後再去執行替換後的命令
eval 命令將會首先掃描命令列進行所有的置換,然後再執行該命令.該命令適用於那些一次掃描無法實現其功能的變數.該命令對變數進行兩次掃描
1 [[email protected] ~]# n=10 2 [[email protected] ~]# echo {1..$n} 3 {1..10} 4 [[email protected] ~]# eval echo {1..$n} 5 1 2 3 4 5 6 7 8 9 10 6 [[email protected] ~]# CMD=whoami 7 [[email protected] ~]# echo $CMD 8 whoami 9 [[email protected] ~]# eval $CMD10 root11 [[email protected] ~]#
View Code
變數賦值方式
shell字串數組