日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Shell笔记9——Shell数组的应用实践

發布時間:2025/4/16 编程问答 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell笔记9——Shell数组的应用实践 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文主要講解Shell腳本開發中數組的知識與實踐

目錄:

? 1.Shell數組介紹

? 2.Shell數組的定義與常用實踐

? 3.Shell數組腳本開發實踐

? 4.shell數組的重要命令

? 5.Shell數組相關面試題實戰 ?




一:Shell數組介紹

1)Shell數組產生的緣由

? 通常在開發shell腳本時,定義變量采用的形式為"a=1;b=2;c=3",可如果有多個變量呢?這時再逐個地定義就會很費勁,并且要是有多個不確定的變量內容,也會難以進行變量定義,此外,快速讀取不同變量的值也是一件很痛苦的事情,于是數組就誕生了,它就是為了解決上訴問題而出現的。


2)什么是Shell數組

? 簡單地說,Shell數組就是一個元素集合,它把有限個元素(變量或字符內容)用一個名字來命名,然后用編號對它們進行區分。這個名字就稱為數組名,用于區分不同內容的編號就稱為數組下標。組成數組的各個元素(變量)稱為數組的元素,有時也稱為下標變量。

? 有了Shell數組之后,就可以用相同名字來引用一系列變量及變量值了,并通過數字(索引)來識別使用它們。在很多場合中,使用數組可以縮短和簡化程序開發。




二:Shell數組的定義與增刪改查

1)Shell數組的定義的多種方法

法1:用小括號將變量值括起來賦值給數組變量,每個變量值之間要用空格進行分割。

語法如下:

array=(value1?value2?value3?...) 示例如下: [root@aliyun?shuzu]#?array=(1?2?3)? [root@aliyun?shuzu]#?echo?${array[*]} 1?2?3 #最常見的定義數組方法


法2:用小括號將變量值括起來,同時采用鍵值對的形式賦值。

語法如下:

array=([1]=one?[2]=tow?[3]=three) 示例如下: [root@aliyun?shuzu]#?array=([1]=one?[2]=tow?[3]=three) [root@aliyun?shuzu]#?echo?${array[*]}????????????????? one?tow?three [root@aliyun?shuzu]#?echo?${array[1]} one [root@aliyun?shuzu]#?echo?${array[2]} tow #此法比較復雜,不推薦使用


法3:通過分別定義數組變量的方法來定義。

語法如下:

array[0]=a;array[1]=b,array[2]=c 示例如下: [root@aliyun?shuzu]#?array[0]=a [root@aliyun?shuzu]#?array[1]=b [root@aliyun?shuzu]#?array[2]=c [root@aliyun?shuzu]#?echo?${array[0]} a [root@aliyun?shuzu]#?echo?${array[1]} b [root@aliyun?shuzu]#?echo?${array[2]} c #此法比較復雜,不推薦使用


法4:動態地定義數組變量,并使用命令的輸出結果作為數組的內容。

array=($(命令))??或??array=(`命令`) 示例如下: [root@aliyun?shuzu]#?touch?ywxi{1..3}.txt [root@aliyun?shuzu]#?ls?-l total?0 -rw-r--r--?1?root?root?0?Jun??9?04:03?ywxi1.txt -rw-r--r--?1?root?root?0?Jun??9?04:03?ywxi2.txt -rw-r--r--?1?root?root?0?Jun??9?04:03?ywxi3.txt [root@aliyun?shuzu]#?array=($(ls))??? [root@aliyun?shuzu]#?echo?${array[*]} ywxi1.txt?ywxi2.txt?ywxi3.txt [root@aliyun?shuzu]#?array=(`ls`) [root@aliyun?shuzu]#?echo?${array[*]} ywxi1.txt?ywxi2.txt?ywxi3.txt #此法經常被使用


2)Shell數組的定義與常用實踐

1.打印數組元素

示例如下:

[root@aliyun?shuzu]#?array=(one?two?three) [root@aliyun?shuzu]#?echo?${array[0]} one [root@aliyun?shuzu]#?echo?${array[1]} two [root@aliyun?shuzu]#?echo?${array[*]} one?two?three [root@aliyun?shuzu]#?echo?${array[@]} one?two?three


2.打印數組元素的個數

示例如下:

[root@aliyun?shuzu]#?echo?${array[*]}? one?two?three [root@aliyun?shuzu]#?echo?${array[@]} one?two?three [root@aliyun?shuzu]#?echo?${#array[@]} 3 [root@aliyun?shuzu]#?echo?${#array[*]} 3


3.數組賦值(不常用,了解即可)

[root@aliyun?shuzu]#?array=(one?two?three) [root@aliyun?shuzu]#?echo?${array[*]} one?two?three [root@aliyun?shuzu]#?array[3]=four [root@aliyun?shuzu]#?echo?${array[*]} one?two?three?four [root@aliyun?shuzu]#?array[0]=ywxi [root@aliyun?shuzu]#?echo?${array[*]} ywxi?two?three?four


4.數組的刪除

[root@aliyun?shuzu]#?echo?${array[*]} ywxi?two?three?four [root@aliyun?shuzu]#?unset?array[1]????????#取消下標為1的數組元素 [root@aliyun?shuzu]#?echo?${array[*]}??????#可以看見元素“two”不見了 ywxi?three?four [root@aliyun?shuzu]#?unset?array [root@aliyun?shuzu]#?echo?${array[*]}??????#刪除整個數組[root@aliyun?shuzu]#


5.數組內容的截取和替換

這里和變量子串的替換是一樣的,因為數組是特殊的變量。

[root@aliyun?shuzu]#?array=(1?2?3?4?5) [root@aliyun?shuzu]#?echo?${array[@]:1:3} 2?3?4 [root@aliyun?shuzu]#?array=(`echo?{a..z}`) [root@aliyun?shuzu]#?echo?${array[*]} a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t?u?v?w?x?y?z [root@aliyun?shuzu]#?echo?${array[*]:1:3} b?c?d [root@aliyun?shuzu]#?echo?${array[*]:0:3} a?b?c [root@aliyun?shuzu]#?echo?${array[*]:0:2} a?b#替換數組元素 [root@aliyun?shuzu]#?array=(1?2?3?4?1?1)? [root@aliyun?shuzu]#?echo?${array[*]/1/a} a?2?3?4?a?a [root@aliyun?shuzu]#?echo?${array[@]/1/a} a?2?3?4?a?a




三:Shell數組腳本開發實踐

范例1):通過C語言型的for循環語句打印數組元素

法1:通過C語言型的for循環語句打印數組元素

[root@aliyun?shuzu]#?cat?sz1.sh #!/bin/bash array=(a?b?c?d?e) for((i=0;i<${#array[*]};i++))????????#從數組的第一個下標0開始,循環數組的所有下標 doecho??${array[i]}????????????????#打印數組 done


法2:通過普通for循環語句打印數組元素

[root@aliyun?shuzu]#?cat?sz2.sh #!/bin/bash array=(a?b?c?d?e) for?n?in?${array[*]} doecho?$n done


法3:使用while循環語句打印數組元素

[root@aliyun?shuzu]#?cat?sz3.sh #!/bin/bash array=(a?b?c?d?e) i=0 while?((i<${#array[*]})) doecho?${array[i]}((i++)) done


范例2):通過豎向列舉法定義數組元素并批量打印

[root@aliyun?shuzu]#?cat?sz4.sh #!/bin/bash array=( ywxi ywxi02 ming ling ywxluo ) for((i=0;i<${#array[*]};i++)) doecho?"This?is?num?$i,then?content?is?${array[$i]}" done echo?"?" echo?"array?length:${#array[*]}"??腳本結果如下: [root@aliyun?shuzu]#?sh?sz4.sh This?is?num?0,then?content?is?ywxi This?is?num?1,then?content?is?ywxi02 This?is?num?2,then?content?is?ming This?is?num?3,then?content?is?ling This?is?num?4,then?content?is?ywxluoarray?length:5


范例3:將命令結果作為數組元素定義并打印

[root@aliyun?shuzu]#?mkdir?array [root@aliyun?shuzu]#?touch?array/{1..3}.txt [root@aliyun?shuzu]#?ls?array/ 1.txt??2.txt??3.txt 腳本如下: [root@aliyun?shuzu]#?cat?ls.sh? #!/bin/bash dir=($(ls?/scripts/practice/shuzu/array)) for((i=0;i<${#dir[*]};i++)) doecho?"This?is?NO.$i,filename?is?${dir[$i]}" done [root@aliyun?shuzu]#?sh?ls.sh? This?is?NO.0,filename?is?1.txt This?is?NO.1,filename?is?2.txt This?is?NO.2,filename?is?3.txt




四:shell數組的重要命令

1)定義命令

靜態數組:

array=(1 2 3)

動態數組:

array=($(ls))

為數組賦值:

array[3]=4


2)打印命令

打印所有元素:

${array[@]}? 或? ${array[*]}

打印數組長度:

${#array[*]} 或 ${array[@]}

打印單個元素:

${array[i]}? ?#i為數組下標



3)循環打印的常用基本語法

[root@aliyun?shuzu]#?cat?xh.sh? #!/bin/bash array=( 192.168.1.1 192.168.1.2 192.168.1.3 ) #c語言for循環語法 for((i=0;i<${#array[*]};i++)) doecho?${array[i]} done#普通for循環語法 for?n?in?${array[*]} doecho?$n done

?



五:Shell數組相關面試題實戰??

范例:利用bash?for循環打印下面這句話中字母數不大于6的單次(某企業面試真題)

We are the operation and maintenance engineers, the responsibility is to ensure data security


解題思路如下:

1)先把所有的單次放到數組里,然后依次進行判斷。命令如下:

[root@aliyun?shuzu]#?array=(We?are?the?operation?and?maintenance?engineers,?the?responsibility?is?to?ensure?data?security)


2)計算變量內容的長度的常見方法

[root@aliyun?shuzu]#?char=ywxi [root@aliyun?shuzu]#?echo?$char|wc?-L 4 [root@aliyun?shuzu]#?echo?${#char} 4 [root@aliyun?shuzu]#?expr??length?$char 4 [root@aliyun?shuzu]#?echo?$char|awk?'{print?length($0)}' 4


3)腳本實現

法1:通過數組方法實現

[root@aliyun?shuzu]#?cat?arr.sh? #!/bin/bash arr=(We?are?the?operation?and?maintenance?engineers,?the?responsibility?is?to?ensure?data?security) for((i=0;i<${#arr[*]};i++)) doif?[?${#arr[$i]}?-lt?6?]thenecho?"${arr[$i]}"fi doneecho?---------------for?word?in?${arr[*]} doif?[?${#word}?-lt?6?]thenecho?"${word}"fi done


法2:通過awk循環實現

[root@aliyun?shuzu]#?arr='We?are?the?operation?and?maintenance?engineers,?the?responsibility?is?to?ensure?data?security'? [root@aliyun?shuzu]#?echo?$arr|awk?'{for(i=1;i<=NF;i++)?if(length($i)<=6)?print?$i}' We are the and the is to ensure data












轉載于:https://blog.51cto.com/13707680/2126639

總結

以上是生活随笔為你收集整理的Shell笔记9——Shell数组的应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。