shell數組與字符串


一、數組

1、 是一段連續的變量,一段連續的內存存儲空間

2、 解決了變量過多的問題;在同一類變量中,我們不需要去定義多個名字,二十以數組的方式來定義;(列表)

  (1) 數組值

  (2) 索引

  (3) 值

3、 如何定義數組:

  (1)declare -i 定義整數(申明)

  (2)declare -a 定義數組array

  (3)declare -A 定義數組嵌套

      a[1]=b

      b[1]=c

      c[1]=d

    【這樣的數組值,在bash中不常用】

4、 如何給數組賦值

array=()

1、 array[0]=zz  (在計算機語言中,索引一般從0開始計算)

  (索引並不一定是數字:key-value array[zz]=1.87m)

  (shell中數組賦值,可以跳躍(條約賦值))

2、 array=(/var/log/*.log)

  做遍歷

        array=(a b c d e)

3、 array=(‘zz=187’ ‘aaa=186’)

4、 通過read命令來賦值

(1)read -t 延遲 -p “指定說明”  -a 輸入數組所需的變量值

(2)read -a a b c d e

5、 如何去調用數組:

$[變量名]

${數組名[索引]} 定義的是哪個索引你,就看到是對應索引指定的值

${數組名} 默認調用 索引=0 的值

${數組名[*]}或者 ${數組名[@]}調用數組內所有的值

(1)調用數組的數組長度

    length(“變量”)

    ${#變量名[*]}或者 ${#變量名[@]}

(2)添加數組值的特殊方式

    ${變量名[${#變量名[@]}]}=“值” 或者 ${變量名[${#變量名[*]}]}=值

(3)關於數組的其他操作

    數組切片

      ${變量名[@]:偏移量:所需要取出值的個數}

               echo ${a[*]:2:4}

      ${變量名[@]:偏移量}

    刪除值

        unset ${變量名[索引]}

    注意:刪除是索引所對的值,而沒有帶着索引一塊刪除;

    【知道值,如何查看索引?】

    修改值

      A[3]=c

      A[3]=d 覆蓋即修改

 二、字符串

1、 字符串切片:

數組切片:${變量名[@]:偏移量:數值個數}

字符串切片: ${變量名:偏移量:數值個數}

                    ${變量名:-數值個數}  【*注意:冒號后面一定要加空格*】

                      ${變量名:-word}  默認賦值的意思

2、 基於模式取子字符串

(1)從左到右

    ${變量名#pattern} 刪除pattern第一次匹配到的字串

    ${變量名##pattern}  刪除所有pattern匹配到的字串

(2)從右向左

    ${變量名%pattern} 刪除pattern第一次匹配到的字串

    ${變量名%%pattern}  刪除所有pattern匹配到的字串

3、 字符替換

(1)${變量名/pattern/替換后的字符串}

          匹配第一個pattern,來進行替換  【pattern並不是正則表達式,而是文件通配符】

(2)${變量名//pattern/替換后的字符串}

          匹配所有的pattern,並進行替換

(3)${變量名/#pattern/替換后的字符串}

          指定匹配行首必須是pattern,才會替換

(4)${變量名/%pattern/替換后的字符串}

          指定匹配行尾必須是pattern,才能替換

注意:/ 分隔符,不能替換為(#%等特殊字符,和sed不一樣)

4、 查找並刪除

  替換中,不指定替換字符串,即為刪除

  ${變量名/pattern}

  ${變量名//pattern}

  ${變量名/#pattern}

  ${變量名/%pattern}

5、 替換大小寫

(1)tr 替換大小寫

    tr [[:lower:]] [[:upper:]] < filename

(2)${變量名^^}  將字符串全部替換為大寫

(3)${變量名,,}  將字符串全部替換為小寫

6、 變量賦值

變量1=${變量名2:-word}  注意沒有空格! 輸入默認值的作用

變量1=${變量名2:+word}  不常用  變量2有值的情況下,才將word默認值賦值給變量1

7、腳本應用其他文件中的變量,如何實現?
        filename1
        vim filename1
            a=1
            b=2
        :wq
        vim filename1.sh
            . /全路徑/filename  后者  source /全路徑/filename    //執行整個代碼
            c=$[$a+$b]
            ehco $c
        :wq
        bash filename1.sh      
        練習:修改hostname,定義一個 hostname文件 name=xxx ,hostname.sh
8、兩個命令
       mktemp  創建臨時文件以及目錄  temp -- /tmp
       避免大家取的文件名字重復;mktemp 名字.XXXXXX (XX代表隨機數(字母和數字))
       默認創建是隨機的文件
        -d  創建的就是隨機的 目錄

       file=`mktemp a.XXXX`

       install   復制或刪除文件,用法同copy
            優點:可以指定權限來復制文件
            用法:intall a文件 b目錄     //復制a文件到b目錄,並回復初始權限(文件:755 目錄:644)
                      -t   源目對換
                      -d  創建
                      -m MODE
                      -o OWNER
                      -g GROUP
9、練習:
(1)獲取此命令所依賴的所有庫文件的列表
(2)復制命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下
(3)復制此命令所依賴的所有庫文件至目標目錄下的對應路徑下/lib64/ld-linux-x86-64.so.2  /mnt/sysroot/lib64/ld-linux-x86-64.so.2每次復制完成一個命令后,不要退出,而是提示用戶輸入新的復制的命令,並重復完成上述功能,直到用戶輸入quit退出;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM