Linux運維:shell腳本(4)

這篇主要記錄下數組的使用,相比來講用得比較少,一樣的根據閱讀<<跟老男孩學Linux運維:Shell編程實戰>>所記錄

系列筆記傳送門:linux

shell數組

Shell數組是一個元素的集合,它把有限個元素用一個名字來命名,而後用編號對全部元素進行區分。這個名字就是數組名,用於區分不一樣內容的編號就叫數組的下標,組成數組的各個元素就是數組的元素,也叫下標變量。shell

一、數組的經常使用操做

1.1 數組的定義編程

數組的定義有多種方法:segmentfault

  • 一、用小括號將變量值括起來賦值給變量,每一個變量值之間用空格隔開。
  • 二、用小括號將變量值括起來,同時採用鍵值對的形式賦值。
  • 三、經過分別定義數組變量的方法定義。
  • 四、動態定義數組變量,並使用命令的輸出結果做爲數組內容。

方法1示例:數組

[root@moli_linux1 ~]# array=(one two three)
[root@moli_linux1 ~]# echo ${array[*]}
one two three
[root@moli_linux1 ~]# echo ${array[0]}
one
[root@moli_linux1 ~]# echo ${array[1]}
two
[root@moli_linux1 ~]# echo ${array[2]}
three

方法2示例:bash

[root@moli_linux1 ~]# array=([1]=one [2]=two [3]=three)
[root@moli_linux1 ~]# echo ${array[*]}
one two three
[root@moli_linux1 ~]# echo ${array[1]}
one
[root@moli_linux1 ~]# echo ${array[2]}
two
[root@moli_linux1 ~]# echo ${array[3]}
three

方法3示例:運維

[root@moli_linux1 ~]# array[0]=a;array[1]=b;array[2]=c
[root@moli_linux1 ~]# echo ${array[*]}
a b c
[root@moli_linux1 ~]#

方法4示例:函數

[root@moli_linux1 test]# touch {1..3}.txt
[root@moli_linux1 test]# ls
1.txt  2.txt  3.txt
[root@moli_linux1 test]# array=($(ls .))
[root@moli_linux1 test]# echo ${array[*]}
1.txt 2.txt 3.txt
[root@moli_linux1 test]#

1.2 數組打印輸出spa

  • 打印數組裏面的單個元素的值時,使用echo ${數組名[下標值]},若是沒有指定數組的下標,那麼默認數組的下標從0開始;
  • 打印整個數組的值可使用echo ${數組名[*]}或者echo ${數組名[@]}
[root@moli_linux1 test]$ array=(one two three)
[root@moli_linux1 test]$ echo ${array[0]}
one
[root@moli_linux1 test]$ echo ${array[1]}
two
[root@moli_linux1 test]$ echo ${array[*]}
one two three
[root@moli_linux1 test]$ echo ${array[@]}
one two three

除了打印數組的值之外,還能夠輸出數組元素的個數,使用echo ${#數組名[*]}或者echo ${#數組名[@]}。這與變量字串的內容是同樣,數組元素也是變量,不過是特殊的變量。code

[root@moli_linux1 test]$ echo ${#array[*]}
3
[root@moli_linux1 test]$ echo ${#array[@]}
3

1.3 數組的賦值

數組的賦值直接使用數組名[下標值]=value,當下標值不存在則添加一個新的數組元素,若是下標存在則會覆蓋原來的值。

[root@moli_linux1 test]$ echo ${array[*]}
one two three
[root@moli_linux1 test]$ echo ${array[1]}
two
[root@moli_linux1 test]$ array[3]=four # 進行賦值
[root@moli_linux1 test]$ echo ${array[*]}
one two three four
[root@moli_linux1 test]$ array[0]=1 # 下標已存在,覆蓋下標爲0的值
[root@moli_linux1 test]$ echo ${array[*]}
1 two three four

1.4 數組的刪除

數組的本質仍是變量,所以能夠用unset 數組名[下標值]進行數組元素的刪除,若是不指定下標值,而是使用unset 數組名則會刪除整個數組。

[root@moli_linux1 test]$ echo ${array[*]}
1 two three four
[root@moli_linux1 test]$ unset array[0] # 刪除下標爲0的數組元素1
[root@moli_linux1 test]$ echo ${array[*]} # 已刪除
two three four
[root@moli_linux1 test]$ unset array # 刪除整個數組
[root@moli_linux1 test]$ echo ${array[*]}  # 顯示爲空,已被刪除

[root@moli_linux1 test]$

1.5 數組內容的截取與替換

數組的截取和替換與變量字串的截取和替換是同樣的,直接例子吧!

[root@moli_linux1 test]# array=(1 2 3 4 5)
[root@moli_linux1 test]# echo ${array[@]:1:3} # 截取下標爲1到3的元素
2 3 4
[root@moli_linux1 test]# array=($(echo {a..z})) # 將命令的結果賦值給數組
[root@moli_linux1 test]# 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@moli_linux1 test]# echo ${array[@]:1:3} # 截取下標爲1到3的元素
b c d
[root@moli_linux1 test]# echo ${array[@]:0:2} 
a b
[root@moli_linux1 test]# echo ${array[@]/a/A} # 把小寫字母a替換爲大寫字母A
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

二、shell數組開發實踐

2.1 結合for循環打印數組元素

#!/bin/bash
echo "====No.1====="
array1=(1 2 3 4 5)
for((i=0;i<${#array1[@]};i++))
do
    echo ${array1[i]}
done

echo "====No.2===="
array2=(1 2 3 4 5)
for n in ${array2[*]}
do
    echo $n
done

執行結果:

clipboard.png

2.2 打印下列句子中,單詞字母數小於6的單詞
句子:I am oldboy teacher welcome to oldboy training class
用數組方法實現:

#!/bin/bash
array=(I am oldboy teacher welcome to oldboy training class)
echo "====No,1===="
for((i=0;i<${#array[@]};i++))
do
    if [ ${#array[$i]} -lt 6 ];then # 這裏使用變量字串知識進行字符串長度統計
        echo "${array[$i]}"
    fi
done

echo "====No.2===="
for word in ${array[*]}
do
    if [ `expr length $word` -lt 6 ];then # 使用expr命令的length函數計算字符串長度
        echo $word
    fi
done

執行結果:

[root@moli_linux1 script]# sh 13_4.sh 
====No,1====
I
am
to
class
====No.2====
I
am
to
class
相關文章
相關標籤/搜索