shell取數組的值,linux中利用腳本編寫數組,Linux基礎之bash腳本進階篇-數組(示例代碼)

 2023-11-10 阅读 22 评论 0

摘要:數組什么是數組?計算機中的數組指的是具有相同類型的若干變量按照一定的順序組織起來的一種數據類型。shell取數組的值。通俗點來說數組就是變量的一種,按現在的術語來說就是變量圈子中的一個,只不過這個變量圈子都是相同類型的變量并有一定的組織順序。

數組

什么是數組?

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

shell取數組的值。通俗點來說數組就是變量的一種,按現在的術語來說就是變量圈子中的一個,只不過這個變量圈子都是相同類型的變量并有一定的組織順序。

數組的格式

array[key]=value

array:表示數組變量的名稱

shell聲明數組變量,key:表示數組元素的索引又稱下標

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

大體了解了什么是數組,下面就來了解下如何定義數組或如何創建數組

定義數組

linux數組定義、定義數組主要有如下幾種類型

1、通過指定元素來定義數組#!/bin/bash

#通過指定元素來定義數組

#指定數組元素值

shell腳本數組的用法?array[0]=8

array[2]=two

#輸出數組元素

echo?"${array[@]}"

linux grep,運行腳本[[email?protected]?test]#?sh?20160910-1

8?two

2、通過declare語句來定義數組#!/bin/bash

#通過declare語句來定義數組

shell 數組。#定義數組?-a?選項表示后面定義的是一個名為array的數組。

declare?-a?array

#為元素賦值

array[0]=1

linux有什么用?array[1]=2

#輸出元素值

echo?"${array[@]}"

運行腳本[[email?protected]?test]#?sh?20160910-2

linux,1?2

通過上面兩個例子,其實可以發現在shell中這樣的聲明不是非常必要的,因為在shell中,所有的變量不必顯示定義就可以用作數組,在某種意義上所有變量都是數組:賦值給沒有下標的變量與賦值給下標內為0的元素效果是相同的。

示例:#!/bin/bash

tom=1

linux中bash命令、echo?"${tom}"

echo?"${tom[0]}"

運行腳本[[email?protected]?test]#?sh?20160910-3

1

linux退出bash?1

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

3、通過元素列表定義數組#!/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[@]}"

運行腳本[[email?protected]?test]#?sh?20160910-4

The?fourth?element?is?4

The?elements?of?this?array?are?1?2?3?4?5?6

數組的訪問或查看

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

1、通過索引值來查看其對應的元素值#!/bin/bash

#定義數組

array=(1?2?3)

#查看下標為1的元素

echo?"the?second?element?is?${array[1]}"

運行腳本[[email?protected]?test]#?sh?20160910-5

the?second?element?is?2

2、通過循環列表遍歷數組

我們如果要用for循環的c表達,那么有一個問題需要解決,就是取值范圍,而數組中有多少個元素只有定義的人才知道,如果有一個現成的數組,我們在不知道其有多少個元素的情況下如何通過for循環遍歷顯示?

為此我們需要先知道該數組有多少個元素,在數組里面可以通過${#array[@]}表示#!/bin/bash

#通過循環列表定義數組

#定義數組

array=(one?two?three?four?five?6?7?8?9?10)

#獲取數組長度

length="${#array[@]}"

#通過循環遍歷數組

for?((i=0;i

echo?"${array[$i]}"

done

運行腳本[[email?protected]?test]#?sh?20160910-6one

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

運行腳本[[email?protected]?test]#?sh?20160910-7

Give?a?name?:?tom

Tom‘s?grades?is?90

[[email?protected]?test]#?vim?20160910-7

[[email?protected]?test]#?sh?20160910-7

Give?a?name?:?rose

rose‘s?grades?is?92

[[email?protected]?test]#?sh?20160910-7

Give?a?name?:?lilei

lilei‘s?grades?is?88

[[email?protected]?test]#?sh?20160910-7

Give?a?name?:?Lucy

Lucy‘s?grades?is?80

[[email?protected]?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[@]}"

運行腳本[[email?protected]?test]#?sh?20160910-8

1?2

2

1?2?3?4

4

可以從數組的任意未使用的下標數開始。可以非連續增加數組

刪除數組

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

命令:unset array[n]#!/bin/bash

#定義數組

array=(1?2?3)

#顯示數組所有元素

echo?"${array[@]}"

#顯示下標為0的數組元素

echo?"${array[0]}"

#刪除下標為0的數組元素

unset?array[0]

echo?"${array[@]}"

echo?"${array[0]}"

2、刪除整個數組

命令:unset array#!/bin/bash

#定義數組

array=(1?2?3)

echo?"${array[@]}"

#刪除整個數組

unset?array

echo?"${array[@]}"

運行腳本[[email?protected]?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[@]}"

運行腳本[[email?protected]?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"

運行腳本[[email?protected]?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"

運行腳本[[email?protected]?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[@]}"

運行腳本[[email?protected]?test]#?sh?20160910-13

the?replaced?array?is?a?b?3?d?e

the?original?array?is?a?b?c?d?e

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/169808.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息