數組和字符串處理


數組:存儲多個元素的連續的內存空間,相當於多個變量的集合
 
    1)定義數組:
        declare -a ARRAY_NAME 定義普通數組 可省略declare -a

]#arr=(a b c d e f)

        declare -A ARRAY_NAME 定義關聯數組 即可自定義索引,可爲字符、字符串等
  
    2)索引:
        類似於C語言,數組元素的下標由0開始編號。關聯數組則由對應的鍵
 
    3)數組元素賦值:
        1.一次附值一個元素:
           array_name[0]=value0

        2.一次賦值全部元素: 中間空格隔開;若某個值中含空格則需引號
           ARRAY_NAME=("VAL1" "VAL2" "VAL3" ...)

        3.只賦值特定元素: 可不連續的賦值
            ARRAY_NAME=([0]="VAL1" [3]="VAL2" ...)

        4.交互式數組值對賦值:不可管道傳遞數據
           read -a ARRAY
 
     4)數組的長度 元素的個數 非索引
          ${#ARRAY_NAME[*]}
          ${#ARRAY_NAME[@]}

     5)數組操作:
     1.引用數組中的元素:
  
    ${ARRAY_NAME[INDEX]} 省略[INDEX]則默認引用第一個元素,即arr[0]
    利用下標獲取數組中指定的元素,下標可以是整數或算術表達式,其值應大於或等於0。

        所有元素:${ARRAY[@]}, ${ARRAY[*]}
  
        數組切片:${ARRAY[@]:offset:number}
        offset: 要跳過的元素個數
        number: 要取出的元素個數
        取偏移量之後的所有元素
        ${ARRAY[@]:offset}

]#echo ${arr[*]:2:3}
c d e

 顯示數組arr第2個元素之後的3個元素
 
    2.指定刪除數組中的某個元素
        unset ARRAY[INDEX]
   
  
練習 冒泡排序:
 

#!/bin/bash
#zjj

for((i=0;i<10;i++));do
    rand[$i]=$RANDOMdone
echo ${rand[@]}

echo ---------------------
for((j=0;j<10;j++));do
    for((k=j;k<9;k++));do
        if [ ${rand[$j]} -gt ${rand[$[k+1]]} ];then
            tmp=${rand[$j]}
            rand[$j]=${rand[$[k+1]]}
            rand[$[k+1]]=$tmp
        else
            continue
        fi
    done
done
echo ${rand[@]}




======>
字符串處理:


僅顯示有變化,未對變量值進行更改

]#var=123456

    1)字符串切片:
        ${#var}:返回字符串變量var的長度

]# echo ${#var}
6

        ${var:offset}:返回字符串變量var中從第offset個字符後所有字符
    offset取值在0 到${#var}-1 之間

]# echo ${var:2}
3456

        ${var:offset:number}:返回字符串變量var中從第offset個字符後number個字符

]# echo ${var:2:3}
345

        ${var: -lengh}:取字符串的最右側幾個字符
    注意:冒號後必須有一空白字符

]# echo ${var: -2}
56

        ${var:offset:-lengh}:從最左側offset字符之後,到最右側lengh個字符之前
        (bash4.2後,允許爲負值)

]# echo ${var:2: -1}
345

    2)基於模式取子串

]#var=root:x:0:0:root:/root:/bin/bash


        1.自左而右:
            ${var#*word}:其中word可以爲指定的任意字符
            刪除第一次出現的word及其前面的字符

]# echo ${var#*root}
:x:0:0:root:/root:/bin/bash

            ${var##*word}:
            同上,不同的是,刪除到最後一個匹配到的字符

]# echo ${var##*root}
:/bin/bash

        2.自右而左:
            ${var%word*}:其中word可以是指定的任意字符;
            刪除自右向左第一個word及其後面的字符

]# echo ${var%root*}
root:x:0:0:root:/

            ${var%%word*}:
            同上,不同,刪除自右向左最後一次出現word及其後的所有字符

]# echo ${var%%root*}

    3)查找替換、刪除:
        ${var/pattern/substi}:
         第一次 被pattern所匹配到的字符串,以substi替換之
        ${var//pattern/substi}:
         所有 被pattern所匹配到的字符串,以substi替換之
        ${var/#pattern/substi}:
         行首 被pattern所匹配到的字符串,以substi替換之
        ${var/%pattern/substi}:
         行尾 被pattern所匹配到的字符串,以substi替換之
 
   刪除:
        ${var/pattern}:查找var值中,刪除第一次被pattern所匹配到的字符串
        ${var//pattern}:所有
        ${var/#pattern}:行首
        ${var/%pattern}:行尾

    4)字符大小寫轉換:
        ${var^^}:把var中的所有小寫字母轉換爲大寫
        ${var,,}:把var中的所有大寫字母轉換爲小寫

變量賦值:

  ${var:-value}:如果var爲空或未設置,那麼返回value;否則,則返回var的值
  ${var:+value}:如果var不空,則返回value,否則返回空值
  ${var:=value}:var爲空或未設置,那麼返回value,並將value賦值給var;否則,則返回var的值
  ${var:?error_info}:var爲空或未設置,那麼在當前終端打印error_info;否則,則返回var的值


#declare [選項] 變量名
    -r 將變量設置爲只讀屬性
    -i 將變量定義爲整型數
    -a 將變量定義爲數組
    -A 將變量定義爲關聯數組
    -f 顯示此腳本前定義過的所有函數名及其內容
    -F 僅顯示此腳本前定義過的所有函數名
    -x 將變量聲明爲環境變量
    -l 將變量值轉爲小寫字母declare –l var=UPPER

    -u 將變量值轉爲大寫字母declare –u var=lower
 

間接變量引用:
    第一個變量的值是第二個變量的名字,
    從第一個變量引用第二個變量的值稱爲間接變量引用
        var1=var2
        var2=value
    此時打印var1的值爲var2,非value
    bash Shell提供了兩種格式實現間接變量引用
        eval var3=\$$var1  eval命令 對變量進行兩次掃描
        echo ${!var1}

]# var1=var2
]# var2=zjj
]# echo ${!var1}
zjj
]# eval var3=\$$var1
]# echo $var3
zjj


#mktemp[OPTION]... [TEMPLATE] 創建臨時文件(隨機文件名)可避免衝突
    -d 創建臨時目錄
    -p DIR 指定臨時文件所存放目錄的位置
 
 TEMPLATE: filename.XXX
 X至少要出現三個,代表幾個隨機字符


#install 安裝複製文件 編譯安裝時常用 可直接將二進制文件賦予權限
    -m MODE 指定權限 默認755
    -o OWNER 指定屬主
    -g GROUP 指定屬組








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章