shell數組與字符串

1、數組linux

一、 是一段連續的變量,一段連續的內存存儲空間正則表達式

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

  (1) 數組值vim

  (2) 索引數組

  (3) 值bash

三、 如何定義數組:ui

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

  (2)declare -a 定義數組array內存

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

      a[1]=b

      b[1]=c

      c[1]=d

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

四、 如何給數組賦值

array=()

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

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

  (shell中數組賦值,能夠跳躍(條約賦值))

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

  作遍歷

        array=(a b c d e)

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

四、 經過read命令來賦值

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

(2)read -a a b c d e

五、 如何去調用數組:

$[變量名]

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

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

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

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

    length(「變量」)

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

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

    ${變量名[${#變量名[@]}]}=「值」 或者 ${變量名[${#變量名[*]}]}=值

(3)關於數組的其餘操做

    數組切片

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

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

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

    刪除值

        unset ${變量名[索引]}

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

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

    修改值

      A[3]=c

      A[3]=d 覆蓋即修改

 2、字符串

一、 字符串切片:

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

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

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

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

二、 基於模式取子字符串

(1)從左到右

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

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

(2)從右向左

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

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

三、 字符替換

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

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

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

          匹配全部的pattern,並進行替換

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

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

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

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

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

四、 查找並刪除

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

  ${變量名/pattern}

  ${變量名//pattern}

  ${變量名/#pattern}

  ${變量名/%pattern}

五、 替換大小寫

(1)tr 替換大小寫

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

(2)${變量名^^}  將字符串所有替換爲大寫

(3)${變量名,,}  將字符串所有替換爲小寫

六、 變量賦值

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

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

七、腳本應用其餘文件中的變量,如何實現?        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八、兩個命令       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九、練習:(1)獲取此命令所依賴的全部庫文件的列表(2)複製命令至某目標目錄(例如/mnt/sysroot)下的對應路徑下(3)複製此命令所依賴的全部庫文件至目標目錄下的對應路徑下/lib64/ld-linux-x86-64.so.2  /mnt/sysroot/lib64/ld-linux-x86-64.so.2每次複製完成一個命令後,不要退出,而是提示用戶輸入新的複製的命令,並重復完成上述功能,直到用戶輸入quit退出;

相關文章
相關標籤/搜索