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?three2.打印數組元素的個數
示例如下:
[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[*]} 33.數組賦值(不常用,了解即可)
[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?four4.數組的刪除
[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循環語句打印數組元素
法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:將命令結果作為數組元素定義并打印
四: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)}' 43)腳本實現
法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数组的应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线性代数学习笔记(几何版)
- 下一篇: WWDC 2018:iOS 12 通知的