bash編程之數組和字符串處理

數組:

程序=指令+數據
    
    指令:
    數據:變量、文件

數組:存儲過個元素的連續的內存空間;

變量:存儲單個元素的內存空間;

數組名:整個數組只有一個名字;

數組索引:編號從0開始;
    
    數組名[索引],
    ${ARRAY_NAME[INDEX]}

注意:bash-4及之后的版本,支持自定義索引格式,而不僅僅是0,1,2 ...數字格式;此類數組稱之為“關聯數組”

聲明數組:

如果往一個變量里邊指定多個元素,如果沒有聲明為數組,只不過是當成多個元素的的那個字符串,declare -a NAME :聲明索引數組declare -A NAME:聲明關聯數組

數組中元素的賦值方式:

(1)一次只賦值一個元素
    ARRAY_NAME[INDEX]=value

(2)一次賦值全部元素
    ARRAY_NAME=("VAL1""VAL2""VAL3" ...)

(3)只賦值特定元素;
    ARRAY_NAME=([0]="VAL1" [3]="VAL4" ...)

引用數組中的元素: ${ARRAY_NAME[INDEX]} ${ARRAY_NAME[*]}:引用數組中的所有元素

注意:引用時,只給數組名,表示引用下標為0的元素;

數組的長度(數組中元素的個數):

${#ARRAY_NAME[*]}${#ARRAY_NAME[@]}

示例:

生成10個隨機數,并找出其中最大值;

#!/bin/bash#declare -a randdeclare -l max=0for i in {0..9};do
        rand[$i]=$RANDOM
        echo ${rand[$i]}
        [ ${rand[$i]} -gt $max ] && max=${rand[$i]}doneecho "MAX:$max"[root@centous1 ~]# ./123.sh773293356870254241086732703140529551975322949MAX:32703

練習:定義一個數組,數組中的元素是/var/log目錄下所有以.log結尾的文件;統計其下標為偶數的文件中的行數之和;

#!/bin/bash#declare -a files
files=(/var/log/*.log)declare -i lines=0for i in $(seq 0 $[${#files[*]}-1]);do
        if [ $[$i%2] -eq 0 ];then
                let lines+=$(wc -l ${files[$i]} | cut -d' ' -f1)        fidoneecho "Lines:$lines"[root@centous1 ~]# ./lines.shLines:3153

數組元素切片:

${ARRAY_NAME[@]: offset:number} offset:要咯過的元素個數; number:要取出的元素個數;省略number時,表示取偏移量之后的所有元素;

向非稀疏數組中追加元素:

ARRAY_NAME[${#ARRAY_NAME[*]}=

刪除數組中的某元素;

unset ARRAY[INDEX]

關聯數組:

declare -A ARRAY_NAME
    
    ARRAY_NAME=([index_name1]="value" ...)

bash的內置字符串處理工具:

字符串切片:

取字符串的字串;
去字符串的最右側的幾個字符:${var: -number}
注意:冒號后邊必須有一個空白字符;
[root@centous1 ~]# name=jarry[root@centous1 ~]# echo ${name:2:2}rr
[root@centous1 ~]# echo ${name:2}rry
[root@centous1 ~]# echo ${name: -2}ry

基于模式取字符串;

${var#*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所儲存的字符串中,第一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;${var##*word}:其中word是指定的分隔符;功能:自左而右,查找var變量所儲存的字符串中,最后一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;
[root@centous1 ~]# mypath="/etc/init.d/functions"[root@centous1 ~]# echo ${mypath#*/}etc/init.d/functions
[root@centous1 ~]# echo ${mypath##*/}functions

${var%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所儲存的字符串中,第一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;

${var%%word*}:其中word是指定的分隔符;功能:自右而左,查找var變量所儲存的字符串中,最后一次出現的word分隔符,刪除此分隔符至字符尾部之間的所有字符;

[root@centous1 ~]# echo ${mypath%/*}/etc/init.d
[root@centous1 ~]# url=http://www.magedu.com:80[root@centous1 ~]# echo ${url%%:*}http
[root@centous1 ~]# echo ${url##*:}80

注意 * 的位置

查找替換:

${var/PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var//PATTERN/SUBSTI}:查找var所表示的字符串中,第一次被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var/#PATTERN/SUBSTI}:查找var所表示的字符串中,行首被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;${var/%PATTERN/SUBSTI}:查找var所表示的字符串中,行尾被PATTERN所匹配到的字符串,將其替換為SUBSSTI所表示的字符串;

注意:PATTERN中使用golb風格和通配符;

查找刪除:

${var/PATTERN}:刪除匹配到的第一個

${var//PATTERN}:刪除全部匹配到的

${var/%PATTERN}:刪除匹配到的尾部那一個

${var/#PATTERN}:刪除匹配到的行首那一個

字符大小寫轉換:

${var^^}:把var中的所有轉換成大寫

 ${var,,}:把var中的所有轉換成大寫

變量賦值:

${var:-value}:如果var變量為空,或未設置,那么返回VALUE;否則,返回var變量的值;${var:=value}:如果var變量為空,或未設置,那么返回VALUE;并將VALUE的值賦給var;否則,返回var變量的值;${var:+value}:如果var變量不空,則返回VALUE;${var:?ERROR_INFO}:如果var為空,或未設置,那么返回ERROR_INFO為錯誤提示;否則,返回var的值;

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

(0)
forestforest
上一篇 2016-08-24 10:45
下一篇 2016-08-24 11:20

相關推薦

  • gawk 語法介紹及其實例

    gawk 語法介紹及其實例  §·awk介紹 Linux文本處理三劍客:grep  sed 和 awk 。其中grep是一種文本過濾工具,sed是文本行編輯器,而awk是一種報表生成器,就是對文件進行格式化處理的,這里的格式化不是文件系統的格式化,而是對文件的內容進行的各種排版,進而格式化顯示。 在linux之上我們使用awk是GUN a…

    Linux干貨 2016-09-22
  • 【福利招聘】 Base 上海 拍拍貨(紅杉領投,靠譜金融公司) 共5人

    公司簡介 拍拍貸成立于2007年6月,全稱為“上海拍拍貸金融信息服務有限公司”,總部位于國際金融中心上海,是中國首批網絡信息借貸平臺。 拍拍貸是一家由工商部門特批,獲批“金融信息服務”的經營范圍,得到政府認可的互聯網金融平臺。拍拍貸用先進的理念和創新的技術建立一個安全、高效、透明的互聯網金融平臺,規范個人貸款行為,讓借入這改善生產生活,讓借出者增加投資渠道?!?/p>

    Linux干貨 2016-12-05
  • 回溯法 -數據結構與算法

    1.回溯法算法思想: 定義:         回溯法(探索與回溯法)是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 1、回溯法適用:有許多問題,當需要找出它的解集(…

    Linux干貨 2015-04-07
  • 任務計劃管理

    一:單一工作調度:at命令       列出在指定的時間和日期在計算機上運行的已計劃命令或計劃命令和程序。必須正在運行“計劃”服務才能使用 at 命令。 示例: [root@CentOS 6 ~]#/etc/init.d/atd restart   啟動服務 …

    Linux干貨 2016-09-12
  • bash變量之位置參數變量

        什么是變量     變量是 bash 環境中非常重要的一個玩意兒,就是讓某一個特定字串代表不固定的內容就是了,講的更簡單一點,我們可以“用一個簡單的 "字眼" 來取代另一個比較復雜或者是容易變動的數據”。    &nbsp…

    Linux干貨 2016-08-15
  • top,htop,ps,dstat命令的使用

    top top是一個動態顯示過程,即可跟據用戶的按鍵不斷刷新當前狀態,top命令提供了實時的對當前系統的狀態監視。 top – 11:53:40 up 11 days, 13:32,  3 users,  load average:&nbs…

    Linux干貨 2017-03-15
欧美性久久久久