Linux Shell系列教程之(六)Shell數組

来源:http://www.cnblogs.com/waitig/archive/2016/06/01/5550806.html
-Advertisement-
Play Games

本文是Linux Shell系列教程的第(六)篇,更多shell教程請看:Linux Shell系列教程 Shell在編程方面非常強大,其數組功能也非常的完善,今天就為大家介紹下Shell數組的用法。 Shell支持一維數組(不支持多維數組),並且沒有限定數組的大小。 類似與C語言,數組元素的下標由 ...


本文是Linux Shell系列教程的第(六)篇,更多shell教程請看:Linux Shell系列教程

Shell在編程方面非常強大,其數組功能也非常的完善,今天就為大家介紹下Shell數組的用法。

Shell數組

Shell支持一維數組(不支持多維數組),並且沒有限定數組的大小。

類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於0。

一、Shell數組的定義

在Shell中,用括弧來表示數組,數組元素之間用“空格”分割開。

定義數組的一般形式為:

array_name=(value1 … valuen)

例如:

array_name=(value0 value1 value2 value3)

array_name=(
value0
value1
value2
value3
)

而且還可以單獨定義數組的各個分量:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

可以不使用連續的下標,而且下標的範圍沒有限制。

二、Shell數組的賦值

直接通過 數組名[下標] 就可以對其進行引用賦值,如果下標不存在,自動添加新一個數組元素

使用示例:

[linuxdaxue@centos5 ~]$ a[1]=100
[linuxdaxue@centos5 ~]$ echo ${a[*]} 
1 100 3 4 5

[linuxdaxue@centos5 ~]$ a[5]=100     
[linuxdaxue@centos5 ~]$ echo ${a[*]}
1 100 3 4 5 100

三、Shell數組的讀取

讀取Shell數組元素值的一般格式是:

${array_name[index]}

valuen=${array_name[2]}

使用舉例:

#!/bin/sh
#www.linuxdaxue.com
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"

運行腳本,輸出:

$./test.sh
First Index: Zara
Second Index: Qadir

使用@ 或 * 可以獲取數組中的所有元素,例如:

${array_name[*]}
${array_name[@]}

使用舉例:

#!/bin/sh
#www.linuxdaxue.com
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}"
echo "Second Method: ${NAME[@]}"

運行腳本,輸出:

$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy

四、Shell數組的刪除

直接通過:unset 數組[下標] 可以清除相應的元素,不帶下標,清除整個數據。

使用示例

[linuxdaxue@centos5 ~]$ a=(1 2 3 4 5)
[linuxdaxue@centos5 ~]$ unset a
[linuxdaxue@centos5 ~]$ echo ${a[*]}

[linuxdaxue@centos5 ~]$ a=(1 2 3 4 5)
[linuxdaxue@centos5 ~]$ unset a[1]   
[linuxdaxue@centos5 ~]$ echo ${a[*]} 
1 3 4 5
[linuxdaxue@centos5 ~]$ echo ${#a[*]}
4

五、Shell數組的其他常用操作

1)Shell數組長度

用${#數組名[@或*]} 可以得到數組長度,示例如下:

# 取得數組元素的個數
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得數組單個元素的長度
lengthn=${#array_name[n]}

2)Shell數組的分片

直接通過 ${數組名[@或*]:起始位置:長度} 切片原先數組,返回是字元串,中間用“空格”分開,因此如果加上”()”,將得到切片數組。

使用舉例

[linuxdaxue@centos5 ~]$ a=(1 2 3 4 5)
[linuxdaxue@centos5 ~]$ echo ${a[@]:0:3}
1 2 3
[linuxdaxue@centos5 ~]$ echo ${a[@]:1:4}
2 3 4 5
[linuxdaxue@centos5 ~]$ c=(${a[@]:1:4})
[linuxdaxue@centos5 ~]$ echo ${#c[@]}
4
[linuxdaxue@centos5 ~]$ echo ${c[*]} 
2 3 4 5

3)Shell數組的替換

數組的替換方法是:${數組名[@或*]/查找字元/替換字元} 該操作不會改變原先數組內容,如果需要修改,可以看上面例子,重新定義數據。

使用舉例

[linuxdaxue@centos5 ~]$ a=(1 2 3 4 5)    
[linuxdaxue@centos5 ~]$ echo ${a[@]/3/100}
1 2 100 4 5
[linuxdaxue@centos5 ~]$ echo ${a[@]}
1 2 3 4 5
[linuxdaxue@centos5 ~]$ a=(${a[@]/3/100}) 
[linuxdaxue@centos5 ~]$ echo ${a[@]}     
1 2 100 4 5

好了,有關Shell數組的內容就纖維大家介紹到這裡,希望大家多多練習,熟練掌握。

更多shell教程請看:Linux Shell系列教程


本文固定鏈接:linux大學網_Linux學習_Shell_嵌入式Linux--Linux Shell系列教程之(六)Shell數組
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文內容 測試數據 欄位屬性 按多行解析運行時日誌 把多行日誌解析到欄位 參考資料 在處理日誌時,除了訪問日誌外,還要處理運行時日誌,該日誌大都用程式寫的,比如 log4j。運行時日誌跟訪問日誌最大的不同是,運行時日誌是多行,也就是說,連續的多行才能表達一個意思。 本文主要說明,如何用 multil... ...
  • 觸發器是一種特殊的存儲過程,它在創建後就存儲在資料庫中。觸發器的特殊性在於它是建立在某個具體的表之上的,而且是自動激發執行的,如果用戶在這個表上執行了某個DML操作( UPDATE 、INSERT 、DELETE ),觸發器就被激發執行。觸發器常用於自動完成一些資料庫的維護工作。例如,觸發器可以具有 ...
  • select COLUMN_NAME from ( SELECT t.COLUMN_NAME, COUNT(*) c FROM USER_TAB_COLUMNS t WHERE t.TABLE_NAME ='table1' OR t.TABLE_NAME='table2' GROUP BY COLU ...
  • 1.安裝FTP組件 點擊:控制面板—》程式和功能—》打開或關閉Windows功能。勾選“FTP伺服器”及“FTP服務”“FTP擴展性”,點擊“確定”,安裝FTP組件。 2.添加FTP站點 點擊:控制面板—》管理工具。選中“Internet信息服務(IIS)管理器”。 雙擊“Internet信息服務( ...
  • 分區里的inode號是0號和1號的block 我相信大家在使用Linux的時候都遇到過誤刪文件系統數據的情況,不管是自己誤刪還是幫人家恢復誤刪 現在用的比較多的恢復工具大概是ext3grep 、extundelete 這兩個 當然本文不是要說這兩個工具的使用方法,而是介紹每個分區里的inode號為0 ...
  • ◊make是什麼? make是一個命令工具,是一個解釋makefile中指令的命令工具。它可以簡化編譯過程裡面所下達的指令,當執行 make 時,make 會在當前的目錄下搜尋 Makefile (or makefile) 這個文本文件,執行對應的操作。make 會自動的判別原始碼是否經過變動了,而 ...
  • 出現這個問題的原因:你可能是上代理了。 解決方案:在IE里 》屬性 》連接 》區域網設置 》去掉前面的勾。確定。 ...
  • 原因:這是由於管理工具的服務中的windows防火牆被禁用了。 解決方案:在window7中點擊控制面板,然後點擊管理工具,在點服務,然後找到windows firewall 然後將其改為自動就就可以了。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...