Linux基礎之bash腳本進階篇-數組

數組docker

什麼是數組?shell

計算機中的數組指的是具備相同類型若干變量按照必定的順序組織起來的一種數據類型數據庫

通俗點來講數組就是變量的一種,按如今的術語來講就是變量圈子中的一個,只不過這個變量圈子都是相同類型的變量並有必定的組織順序。vim


數組的格式數組

array[key]=valuebash

array:表示數組變量的名稱app

key:表示數組元素的索引又稱下標ide

value:表示key對應的數組元素的值this


大致瞭解了什麼是數組,下面就來了解下如何定義數組或如何建立數組spa



定義數組

定義數組主要有以下幾種類型

一、經過指定元素來定義數組

#!/bin/bash
#經過指定元素來定義數組
#指定數組元素值
array[0]=8
array[2]=two
#輸出數組元素
echo "${array[@]}"

運行腳本

[root@docker test]# sh 20160910-1
8 two

二、經過declare語句來定義數組

#!/bin/bash
#經過declare語句來定義數組
#定義數組 -a 選項表示後面定義的是一個名爲array的數組。
declare -a array
#爲元素賦值
array[0]=1
array[1]=2
#輸出元素值
echo "${array[@]}"

運行腳本

[root@docker test]# sh 20160910-2
1 2

經過上面兩個例子,其實能夠發如今shell中這樣的聲明不是很是必要的,由於在shell中,全部的變量沒必要顯示定義就能夠用做數組,在某種意義上全部變量都是數組賦值給沒有下標的變量與賦值給下標內爲0的元素效果是相同的

示例:

#!/bin/bash
tom=1
echo "${tom}"
echo "${tom[0]}"

運行腳本

[root@docker test]# sh 20160910-3
1
1

由結果可知賦值給沒有下標的變量與賦值給下標內爲0的元素效果是相同的。


三、經過元素列表定義數組

#!/bin/bash
#經過元素列表定義數組
#定義數組
array=(1 2 3 4 5 6)
#輸出第4個數組元素的值
echo "The fourth element is ${array[3]}"
#輸出全部元素的值
echo "The elements of this array are ${array[@]}"

運行腳本

[root@docker test]# sh 20160910-4
The fourth element is 4
The elements of this array are 1 2 3 4 5 6



數組的訪問或查看

數組訪問有若干途徑,下面列舉經常使用兩種

一、經過索引值來查看其對應的元素值

#!/bin/bash
#定義數組
array=(1 2 3)
#查看下標爲1的元素
echo "the second element is ${array[1]}"

運行腳本

[root@docker test]# sh 20160910-5
the second element is 2


二、經過循環列表遍歷數組

咱們若是要用for循環的c表達,那麼有一個問題須要解決,就是取值範圍,而數組中有多少個元素只有定義的人才知道,若是有一個現成的數組,咱們在不知道其有多少個元素的狀況下如何經過for循環遍歷顯示?

爲此咱們須要先知道該數組有多少個元素,在數組裏面能夠經過${#array[@]}表示

#!/bin/bash
#經過循環列表定義數組
#定義數組
array=(one two three four five 6 7 8 9 10)
#獲取數組長度
length="${#array[@]}"
#經過循環遍歷數組
for ((i=0;i<$length;i++));do
    echo "${array[$i]}"
done

運行腳本

[root@docker test]# sh 20160910-6
one
two
three
four
five
6
7
8
9
10



關聯數組

「關聯數組」是一種具備特殊索引方式的數組。不只能夠經過整數來索引它,還可使用字符串或者其餘類型的值(除了NULL)來索引它

關聯數組必須事先聲明,不然致使建立關聯數組失敗

declare -A  array聲明關聯數組

array=([a]=tom [b]=john [c]=3)

若是咱們定義下標內是人名其對應的元素爲成績,那麼輸入指定的人名就能夠知道其對應的成績

#!/bin/bash
#定義關聯數組
declare -A grades
#爲數組下標指定對應的分數
grades=([tom]=90 [lilei]=88 [rose]=92 [Lucy]=80)
#給一個名字
read -p "Give a name : " name_G
#判斷是否給了內容,若沒有則在提示後退出
[ -z $name_G ] && echo "None please select [tom|lilei|rose|Lucy] && exit 1"
#根據輸入的名字輸出對應的分數
case $name_G in
tom)
  echo "tom's grades is ${grades[tom]}";;
lilei)
  echo "lilei's grades is ${grades[lilei]}";;
rose)
  echo "rose's grades is ${grades[rose]}";;
Lucy)
  echo "Lucy's grades is ${grades[Lucy]}";;
*)
  echo "please select [tom|lilei|rose|Lucy]"
esac

運行腳本

[root@docker test]# sh 20160910-7
Give a name : tom
Tom's grades is 90
[root@docker test]# vim 20160910-7
[root@docker test]# sh 20160910-7
Give a name : rose
rose's grades is 92
[root@docker test]# sh 20160910-7
Give a name : lilei
lilei's grades is 88
[root@docker test]# sh 20160910-7
Give a name : Lucy
Lucy's grades is 80
[root@docker test]# sh 20160910-7
Give a name : other
please select [tom|lilei|rose|Lucy]



數組的增刪合


增長數組個數

#!/bin/bash
#定義數組
array=(1 2)
#顯示數組全部元素
echo "${array[@]}"
#顯示數組元素個數
echo "${#array[@]}"
#追加數組元素
array[2]=3
array[3]=4
#顯示追加後的數組信息
echo "${array[@]}"
echo "${#array[@]}"

運行腳本

[root@docker test]# sh 20160910-8
1 2
2
1 2 3 4
4

能夠從數組的任意未使用的下標數開始。能夠非連續增長數組


刪除數組

一、刪除數組指定某個元素

命令:unset array[n]

#!/bin/bash
#定義數組
array=(1 2 3)
#顯示數組全部元素
echo "${array[@]}"
#顯示下標爲0的數組元素
echo "${array[0]}"
#刪除下標爲0的數組元素
unset array[0]
echo "${array[@]}"
echo "${array[0]}"


二、刪除整個數組

命令:unset array

#!/bin/bash
#定義數組
array=(1 2 3)
echo "${array[@]}"
#刪除整個數組
unset array
echo "${array[@]}"

運行腳本

[root@docker test]# sh 20160910-9
1 2 3


數組之間的合併

數組能夠將多個不一樣的數組組合成一個新的數組。

數組鏈接語法以下:

("${array1[@]}" "${array2[@]}" ... "${arrayN[@]}")

數組之間用空格隔開

示例

#定義兩個數組
array1=(1 2 3)
array2=(4 5 6)
#鏈接數組
array1_2=("${array1[@]}" "${array2[@]}")
#顯示合併後數組的全部元素
echo "${array1_2[@]}"

運行腳本

[root@docker test]# sh 20160910-10
1 2 3 4 5 6



數組中的切片

所謂切片,是指截取數組的部分元素或某個元素的部份內容

基本語法爲:${array[@|*|n]:start:length}

示例1:給定一個長度爲8的數組,截取第3個元素開始的4個元素。

#!/bin/bash
array=(1 2 3 4 5 6 7 8)
var=${array[@]:3:4}
echo "$var"

運行腳本

[root@docker test]# sh 20160910-11
4 5 6 7


示例2:給定一個長度爲3的數組,截取第2個元素,從該元素的第1個字符開始,截取其中3個字符

#!/bin/bash
array=(apple orange banana)
var=${array[2]:1:3}
echo "$var"

運行腳本

[root@docker test]# sh 20160910-12
ana

數組中的替換

數組的替換是指將某個數組元素的部份內容用其餘字符串來代替,但不影響原來的數組的值。

基本語法爲:${array[@|*]/pattern/replacement}

#!/bin/bash
replace=(a b c d e)
echo "the replaced array is ${replaced[@]/c/3}"
echo "the original array is ${replace[@]}"

運行腳本

[root@docker test]# sh 20160910-13
the replaced array is a b 3 d e
the original array is a b c d e



小結

本文主要講述數組的概念數組的定義數組的查看關聯數組的使用數組的增刪合數組的切片數組的替換這7部份內容。

感觸:我在總結完數組後,隱隱感受到數組與數據庫之間有必定的關聯性。

查看歷史能夠知道數組誕生於數據庫以前,所以我感受數據庫這個思想必定程度上是借鑑了數組的一些理念。固然數據庫比數組要強大不少,在數據查詢搜索專業許多。可仍是以爲這二者之間有種本質上的一致:基於數據之間的對應。

相關文章
相關標籤/搜索