數組和字符串處理

數組:存儲多個元素的連續的內存空間,相當于多個變量的集合
 
    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 指定屬組

原創文章,作者:Jasper,如若轉載,請注明出處:http://www.www58058.com/39259

(0)
JasperJasper
上一篇 2016-08-24
下一篇 2016-08-24

相關推薦

  • 關于 進程和性能監控

            Linux系統狀態的查看及管理工具:     pstree, ps, pidof, pgrep, top, htop, glance,pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup pstree命…

    系統運維 2016-09-11
  • 運維自動化之系統安裝

    自動化安裝系統,cobbler的安裝使用

    Linux干貨 2018-01-15
  • ACL權限實例詳解

    CentOS7當中,無論是操作系統安裝時還是之后手工創建的文件系統(xfs、ext4)均會開啟ACL功能。 CentOS6及之前的版本,僅操作系統安裝時創建的文件系統才會默認開啟ACL,手工創建的文件系統,需要手工開啟ACL 功能。 Acl如何設置 創建分區 mount -o acl /dev/sda7  取消的方式,重新掛載時不指定即可 tune…

    2017-07-29
  • N21_第二周練習

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 文件管理類命令:cp,mv.rm 復制命令:cp 格式:        cp [OPTION]… [-T] SOURCE DEST        cp [OPTION]… SOU…

    Linux干貨 2016-07-16
  • Linux終端類型

            終端是一種字符型設備,它有多種類型,通常使用tty來簡稱各種類型的終端設備。 [root@localhost ~]# ll /dev|egrep 'tty|pts' crw-rw-rw-. 1&nb…

    Linux干貨 2016-10-14
  • 94-varnish

        一. Web Page Cache 相關概念

    2016-11-18
欧美性久久久久