數組和字符串處理

數組:存儲多個元素的連續的內存空間,相當于多個變量的集合
 
    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 10:12
下一篇 2016-08-24 10:13

相關推薦

  • HAProxy七種調度方法的簡單示意圖

    看了三個月,中間因出差和其他事沒有看估計也有十幾天,剛把35天的視頻看完。很多內容都記不住,待第一次看完后再回頭看吧。 現在想,對內容進行簡單的畫圖,把基本的體現出來,對記憶和回顧應該有幫助。

    Linux干貨 2016-07-26
  • NFS實現共享wordpress

    實驗環境 192.168.68.134 wordpress站點 nfs-server 192.168.68.144 nfs-client   實驗要求 nfs server共享/var/www/html目錄 nfs clinet掛載nfs-server共享的目錄,部署wordpress   nfs server端 先部署wordpress…

    Linux干貨 2017-10-21
  • N25_第九周作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; 2、寫一個腳本     (1) 獲取當前主機的主機名,保存于hostname變量中;     (2) 判斷此變量的值是否為localhost,如果是…

    Linux干貨 2017-02-02
  • nginx 配置參數說明和實驗

    nginx.org 實驗版本: 1.10.2 相關命令: # nginx -t //檢查配置文件格式 #nginx -s reload //重新載入配置文件 實驗: 主配文件大概組成 主配置文件的設定 /etc/nginx/nginx.conf events{..} //事件驅動相關 http{..} //網站服務相關 全局配置段解讀與實驗: user ng…

    2017-05-12
  • 20160802課堂練習題

    練習: 1、  當用戶xiaoming對/testdir 目錄無執行權限時,意味著無法做哪些操作? 無法cd進入該目錄,但可以ls查看到該目錄下的文件,其余的任何操作都執行不了。 2、  當用戶xiaoqiang對/testdir 目錄無讀權限時,意味著無法做哪些操作? 能夠進入該目錄,不能讀取到信息;但如果知道有哪些文件及目錄是可以創建…

    Linux干貨 2016-08-04
  • vim常用快捷鍵

    1、vim /etc/vimrc進入配置文件 如果不知道vimrc文件在哪,可使用 :scriptnames 來查看 set nu      #行號 set tabstop=4  #一個tab為4個空格長度 set ai  #設置自動縮進 syntax on   #高亮   2、基本 空格鍵 向右移動一格 x 刪除后面…

    2017-09-05
欧美性久久久久