Shell筆記9——Shell數組的應用實踐

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

目錄:shell

  1.Shell數組介紹
數組

  2.Shell數組的定義與經常使用實踐bash

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

  4.shell數組的重要命令spa

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




一:Shell數組介紹three

1)Shell數組產生的原因ip

  一般在開發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開始,循環數組的全部下標
do
    echo  ${array[i]}                #打印數組
done


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

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


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

[root@aliyun shuzu]# cat sz3.sh
#!/bin/bash
array=(a b c d e)
i=0
while ((i<${#array[*]}))
do
    echo ${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++))
do
    echo "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 ywxluo
 
array 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++))
do
    echo "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++))
do
    echo ${array[i]}
done

#普通for循環語法
for n in ${array[*]}
do
    echo $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++))
do
    if [ ${#arr[$i]} -lt 6 ]
    then
        echo "${arr[$i]}"
    fi
done

echo ---------------

for word in ${arr[*]}
do
    if [ ${#word} -lt 6 ]
    then
        echo "${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
相關文章
相關標籤/搜索