shell字符串數組

數組

  聲明數組

    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
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 [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
View Code

 

  字符串模式取子字符串

 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 ~]# 
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 [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 ~]# 
View Code

 

變量賦值方式

  

相關文章
相關標籤/搜索