佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > Shell中數(shù)組以及其相關(guān)操作的詳細(xì)實(shí)例

Shell中數(shù)組以及其相關(guān)操作的詳細(xì)實(shí)例

熱門標(biāo)簽:服務(wù)外包 鐵路電話系統(tǒng) 呼叫中心市場(chǎng)需求 AI電銷 Linux服務(wù)器 百度競(jìng)價(jià)排名 地方門戶網(wǎng)站 網(wǎng)站排名優(yōu)化

Shell中數(shù)據(jù)類型不多,比如說(shuō)字符串,數(shù)字類型,數(shù)組。數(shù)組是其中比較重要的一種,其重要應(yīng)用場(chǎng)景,可以求數(shù)組長(zhǎng)度,元素長(zhǎng)度,遍歷其元素,元素切片,替換,刪除等操作,使用非常方便。

Shell中的數(shù)組不像JAVA/C,只能是一維數(shù)組,沒(méi)有二維數(shù)組;數(shù)組元素大小無(wú)約束,也無(wú)需先定義數(shù)組的元素個(gè)數(shù);但其索引則像JAVA/C/Python,從0開始,下面其常用的方式進(jìn)行總結(jié).

【數(shù)組聲明】

備注:

1) 不像JAVA/C等強(qiáng)編程語(yǔ)言,在賦值前必須聲明;SHELL只是弱編程語(yǔ)言,可事先聲明也可不聲明;

2) 用unset來(lái)撤銷數(shù)組,可用unset array_name[i]來(lái)刪除里面的元素

【數(shù)組定義】

備注:

1) 數(shù)組中的元素,必須以"空格"來(lái)隔開,這是其基本要求;

2) 定義數(shù)組其索引,可以不按順序來(lái)定義,比如說(shuō):names=([0]=Jerry [1]=Alice [2]=David [8]=Wendy);

3)字符串是SHELL中最重要的數(shù)據(jù)類型,其也可通過(guò)($str)來(lái)轉(zhuǎn)成數(shù)組,操作起來(lái)非常方便;

【數(shù)組長(zhǎng)度】

備注:

1) 使用${array_name[@]} 或者 ${array_name[*]} 都可以全部顯示數(shù)組中的元素

2) 同樣道理${#array_name[@]} 或者 ${#array_name[*]}都可以用來(lái)求數(shù)組的長(zhǎng)度

3)求數(shù)組中元素的長(zhǎng)度方法有很多,相當(dāng)于求字符串的長(zhǎng)度

【數(shù)組索引】

[root@locathost ~]# s="A,B,C,D"
[root@locathost ~]# a=(`echo $s | tr ',' ' '`)  # 將字符串轉(zhuǎn)變成數(shù)組
[root@locathost ~]# echo ${!a[@]}        # 求數(shù)組中的索引 
0 1 2 3

元素刪除】 

[root@localhost ~]# a=(A B C D)
[root@localhost ~]# unset a[2]     # 刪除索引為2的元素
[root@localhost ~]# echo ${a[@]}    # 顯示刪除后的元素
A B D

【數(shù)組遍歷】

腳本輸出:

備注:

1) 可以使用標(biāo)準(zhǔn)的for循環(huán),這種類C語(yǔ)言的方式來(lái)遍歷數(shù)組中的元素

2) for 元素 in 元素集(數(shù)組) 這種類Python的方式來(lái)遍歷數(shù)組

3)從代碼可讀性與執(zhí)行速度來(lái)看,推薦使用第二種方式

【數(shù)組賦值】

備注:

1) 第一種是給已經(jīng)存在的元素項(xiàng)重新賦值

2) 當(dāng)然也可以給不存在的索引添加賦值,可以看下面的示例

【數(shù)組添加】

【數(shù)組切片】

數(shù)組切片

元素切片

備注:

1) 通用的格式${array[@]:起始位置:長(zhǎng)度},中間以":"隔開,如果第二項(xiàng)省略的話,就取后面所有的項(xiàng)

2) 切片后返回的是字符串,可以通過(guò) 新數(shù)組=(${舊數(shù)組[@]:索引:長(zhǎng)度})來(lái)索引,參見上面最后一個(gè)例子

3) 區(qū)別于Python之一:起始位置可以為負(fù)數(shù),但必須以放在()中,長(zhǎng)度不能為負(fù)數(shù)

4)區(qū)別于Python之二:第二項(xiàng)在Python里面是結(jié)束索引,在Shell則代表所取元素的長(zhǎng)度

5) 區(qū)別于Python之三:Python可以通過(guò) list[-1:-4:-2]來(lái)反向取數(shù),在Shell則實(shí)現(xiàn)不了

【數(shù)組替換】

${array[@]/x/y}     最小匹配替換,每個(gè)元素只替換一次

${array[@]//x/y}    最大匹配替換,每個(gè)元素可替換多次

${array[@]/x/}      最小匹配刪除,只刪除一個(gè)符合規(guī)定的元素

${array[@]//x/}     最大匹配刪除,可刪除多個(gè)符合規(guī)定的元素

${array[@]/#x/y}     從左往右匹配替換,只替換每個(gè)元素最左邊的字符

${array[@]/%x/y}     從右往左匹配替換,只替換每個(gè)元素最右邊的字符

【數(shù)組刪除】

#  每個(gè)元素,從左向右進(jìn)行最短匹配

## 每個(gè)元素,從左向右進(jìn)行最長(zhǎng)匹配

%  每個(gè)元素,從右向左進(jìn)行最短匹配

%% 每個(gè)元素,從右向左進(jìn)行最長(zhǎng)匹配

【數(shù)組應(yīng)用】

示例一: 將ifconfig命令取到的本地IP: 127.0.0.1逐行顯示出來(lái)

腳本輸出:

示例二: 模擬堆棧的push,pop,shift,unshift操作

腳本輸出:

示例三: 在1-10間,隨機(jī)生成10個(gè)不重復(fù)的數(shù),將其放置于數(shù)組中

腳本輸出:

備注:

1) 生成[1,10]范圍內(nèi)不重復(fù)的隨機(jī)整數(shù),并保存到數(shù)組array中

2) seq 1 10 用于生成1~10的整數(shù)序列(包含邊界值1和10)

3) awk中的rand()函數(shù)用于隨機(jī)產(chǎn)生一個(gè)0到1之間的小數(shù)值(保留小數(shù)點(diǎn)后6位)

4)rand()只生成一次隨機(jī)數(shù),要使用srand()函數(shù)使隨機(jī)數(shù)滾動(dòng)生成

5) 括號(hào)里留空即默認(rèn)采用當(dāng)前時(shí)間作為隨機(jī)計(jì)數(shù)器的種子,這樣以秒為間隔,隨機(jī)數(shù)就能滾動(dòng)隨機(jī)生成了

6) 由于以秒為間隔,所以如果快速連續(xù)運(yùn)行兩次腳本(1s內(nèi)),你會(huì)發(fā)現(xiàn)生成的隨機(jī)數(shù)還是一樣的

示例四: 將字符串處理后轉(zhuǎn)為為數(shù)組,再對(duì)其打印輸出

腳本輸出:

示例五: 用read -a參數(shù),從標(biāo)準(zhǔn)輸入中讀取數(shù)組,再做操作

腳本輸出:

示例六:  判斷某個(gè)變量,是否在數(shù)組中,在輸出YES,否輸出NO

腳本輸出:

示例七:  對(duì)數(shù)組中的元素進(jìn)行排序

示例八:  將/etc/passwd文件中以:分隔的第一列,即用戶名放置于一個(gè)數(shù)組中

示例九:  將1-8,每個(gè)數(shù)自乘后輸出

腳本輸出:

示例十:  借助數(shù)組來(lái)設(shè)置SHELLS的環(huán)境變量

示例十一:  設(shè)置IFS,讀取文件內(nèi)容示例

示例十二:  利用eval,模擬實(shí)現(xiàn)數(shù)組的功能

腳本輸出:

示例十三:  利用數(shù)組來(lái)實(shí)現(xiàn)冒泡排序

思路:會(huì)重復(fù)地走訪過(guò)要排序的數(shù)組,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。越大的元素會(huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端

腳本輸出:

示例十四:  利用數(shù)組來(lái)求最大值

腳本輸出

總結(jié)

到此這篇關(guān)于Shell中數(shù)組以及其相關(guān)操作的文章就介紹到這了,更多相關(guān)Shell數(shù)組操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Shell腳本數(shù)組操作小結(jié)
  • Shell腳本數(shù)組用法小結(jié)
  • linux shell數(shù)組深入學(xué)習(xí)理解
  • shell for循環(huán)與數(shù)組應(yīng)用介紹
  • linux shell 中數(shù)組的定義和for循環(huán)遍歷的方法
  • Linux shell數(shù)組循環(huán)的實(shí)例詳解
  • Shell中創(chuàng)建序列和數(shù)組(list、array)的方法
  • shell 使用數(shù)組作為函數(shù)參數(shù)的方法(詳解)
  • 淺談shell數(shù)組的定義及循環(huán)
  • Shell動(dòng)態(tài)生成數(shù)組的多種方法

標(biāo)簽:銅川 崇左 湘潭 湖南 仙桃 蘭州 黃山 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Shell中數(shù)組以及其相關(guān)操作的詳細(xì)實(shí)例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    福安市| 山东省| 迁西县| 宁城县| 齐齐哈尔市| 富民县| 松原市| 黄陵县| 井冈山市| 闽清县| 成都市| 阜阳市| 高要市| 临潭县| 连云港市| 普定县| 湄潭县| 尼勒克县| 岢岚县| 安徽省| 化州市| 天等县| 黎平县| 修文县| 湖南省| 邵武市| 襄汾县| 读书| 武强县| 三原县| 无为县| 大化| 郑州市| 西吉县| 岱山县| 雷山县| 武乡县| 金溪县| 兴文县| 辉县市| 滨州市|