5shell中的陣列

2022-06-11 02:09:11 字數 4371 閱讀 7194

(1)shell不限制陣列的大小,陣列元素的下標從0開始計數

(2)獲取陣列中的元素要使用下標[ ],下標可以是乙個整數,也可以是乙個結果為整數的表示式,但是下標必須大於等於0

(3)bash shell只支援一維陣列,不支援多維陣列

在 shell 中,用括號( )來表示陣列,陣列元素之間用空格來分隔。由此,定義陣列的一般形式為:array_name=(ele1  ele2  ele3 ... elen)

注意,賦值號=兩邊不能有空格,必須緊挨著陣列名和陣列元素。

情形指令碼

解釋定義陣列

nums=(29 100 13 8 91 44)

echo $----->29 100 13 8 91 44

shell 是弱型別的,它並不要求所有陣列元素的型別必須相同

arr=(20 56 "")

第三個元素就是乙個「異類」,前面兩個元素都是整數,而第三個元素是字串。

shell 陣列的長度不是固定的,定義之後還可以增加元素

nums=(29 100 13 8 91 44)

nums[6]=88

echo $------>9 100 13 8 91 44 88

無需逐個元素地給陣列賦值,下面的**就是只給特定元素賦值:

ages=([3]=24 [5]=19 [10]=12)

以上**就只給第 3、5、10 個元素賦值,所以陣列長度是 3。

注意到雖然陣列長度是3,但是該陣列只在指定位置有真實值,其他位置的值都為空,即使下標位置越界,其值依然為空,不會報錯

獲取陣列元素的值,一般使用下面的格式:$,其中,array_name 是陣列名,index 是下標。

指令碼結果

#!/bin/bash

nums=(135

7)echo

'輸出所有陣列元素:

'$echo

'輸出第2個元素:

'$nums[

5]=8

#給第5個元素賦值(此時會增加陣列長度)

echo

'輸出第3個元素:

'$echo

'輸出第4個元素:

'$echo

'輸出第5個元素:

'$echo

'輸出所有陣列元素:

'$

執行結果:

輸出所有陣列元素:1 3 5 7

輸出第2個元素:5

輸出第3個元素:7

輸出第4個元素:

輸出第5個元素:8

輸出所有陣列元素:1 3 5 7 8

$ 獲取陣列的第二個元素

$ $使用@*可以獲取陣列中的所有元素

陣列長度,即陣列元素的個數,可以使用#來獲取陣列元素的個數。

情形指令碼

結果使用#來獲取陣列元素的個數$$

獲取指定下標位置的元素長度

獲取 arr 陣列的第 2 個元素(假設它是字串)的長度。

$字串長度的獲取方式$舉栗

#!/bin/bash

nums=(135

7)echo

'輸出陣列的長度:

'$var1='

qwertyuiop

'echo

'字串長度:'$

nums[

8]=$

echo

'輸出陣列的長度:'$

echo

'第1個元素的長度:

'$echo

'第8個元素的長度:

'$unset nums[

1]#刪除元素

echo

'輸出陣列的長度:

'$

執行結果:

輸出陣列的長度:4

字串長度:10

輸出陣列的長度:5

第1個元素的長度:1

第8個元素的長度:10

輸出陣列的長度:4

所謂 shell 陣列拼接就是將兩個陣列連線成乙個陣列。

拼接陣列的思路是:先利用@*,將陣列擴充套件成列表,然後再合併到一起。具體格式如下:

array_new=($  $)

array_new=($  $)

舉栗結果

#!/bin/bash

arr1=(12)

arr2=(qwer tyui)

array_new1=($ $)

array_new2=($ $)

echo $

echo $

執行結果:

1 2 qwer tyui

1 2 qwer tyui

情形指令碼

結果使用unset關鍵字來刪除陣列元素

unset array_name[index]

刪除整個陣列

unset array_name

舉栗#!/bin/bash

arr=(23 56 99 66 )

unset arr[1]

echo $

unset arr

echo $

執行結果:

23 99 66

注意最後的空行,它表示什麼也沒輸出,因為陣列被刪除了,所以輸出為空

shell中的關聯陣列類似於python中字典的概念,關聯陣列也成為鍵值對陣列,鍵(key)即陣列的下標,值(value)即元素值。

6.1 建立關聯陣列

建立關聯陣列必須使用帶有-a選項的 declare 命令

情形指令碼

新定義後賦值

declare -a people

color['num1']=xiaohong

color[num2]=xiaobai

color["num3"]=xiaohei

定義時同時賦值

declare -a people=(['num1']='xiaohong' [num2]='xiaobai' [num3]=xiaohei)

6.2 訪問關聯陣列元素

情形指令碼

結果獲取關聯陣列的元素值

$(array_name["index"])

echo $-----> xiaohong

獲取所有元素的下標$$

echo $----->xiaohong xiaobai xiaohei

echo $----->xiaohong xiaobai xiaohei

獲取所有元素的值$$

echo $-----> num1 num2 num3

echo $-----> num1 num2 num3

獲取關聯陣列長度

與獲取普通陣列長度的方式相同$$

echo $-----> 3

echo $-----> 3

舉栗

#!/bin/bash

declare -a people=(['

num1

']='

xiaohong

' [num2]='

xiaobai

' [num3]=xiaohei)

echo

'聯合陣列的key值為:

'$echo

'聯合陣列元素值為:

'$echo

'聯合陣列的長度為:'$

echo

'迴圈列印聯合陣列的key值

'for item in $;do

echo

$done

echo

'迴圈列印聯合陣列的元素值

'for item in $;do

echo

$done

echo

'迴圈列印聯合陣列的鍵值對

'for item in $;do

echo $--\>$

done

執行結果:

1、定義 list1=(a b c)

2、獲取item個數: $ $

3、獲取某個item:$,$

4、轉換成以空格分隔各item的字串: str=$ str=$

5、把以空格分隔的字串轉換成list:str="a b c"; list1=($str); echo $;

實驗5 shell指令碼程式設計

專案 內容這個作業的課程在 這個作業的要求 學號 姓名 17041528 朱思皓 作業學習目標 1.了解shell指令碼的概念及使用 2.掌握shell指令碼語言的基本語法 3.學習簡單的shell指令碼程式設計 1.讓使用者輸入乙個字串,如果使用者輸入的是hello,請輸入hello 使用者姓名首...

複習 計算機基礎 5 shell 基礎

檢視檔案詳情和容量 m為單位 ls lh 許可權數值 r 4w 2 x 1 chmod改變檔案許可權 chmod r 連同子檔案一起改變 755644 744 找出你在的使用者組 groups mi 檢視mi是那個使用者組 id find find pathname options print ex...

嵌入式Linux學習5 Shell程式設計

shell 使用 1.shell簡介 簡單的說shell就是一種命令解析器,是一種程式設計互動介面,通過驅動作業系統核心完成指定的工作,它是使用者與作業系統之間的橋梁。分類 linux主流的shell有三種bash tcsh korn shell 這裡我學習的是bash 它是標準的uxin shel...