bash shell之陣列使用

2021-06-21 22:15:30 字數 3711 閱讀 6604

摘要:

1、array=(value1 value2 ...... valuen) 

#賦值2、read -a array  

#讀入陣列

3、$   $ 

$  $ 

#陣列資訊,陣列下標,陣列長度,去陣列位置

4、# array=($(ls | grep rpm)) 

#命令執行結果放入陣列

5、for i in $ ; do  

#遍歷陣列

6、set| grep array  

#利用set檢視陣列賦值情況

1、陣列的宣告、賦值和檢視

bash只支援一維陣列,但引數個數無限制。如果要構造乙個二維陣列,就需要自己想辦法,在第三小節會有舉例。bash陣列的下標從0開始。

array=(value1 value2 ...... valuen)  

#從下標0開始依次賦值

array=([1]=value1 [2]=value2 [0]=value0)  

#指定下標賦值

declare -a array=(value1 value2 ...... valuen)  

#宣告+賦值,也可以只宣告

unixtype=('debian' 'red hat' 'fedora')  

#如果元素有空格,就要用引號

unset array  

#清除陣列

unset array[1]  

#清除陣列的指定元素  

read賦值舉例

# read -a array  

#-a表示從標準輸入讀入陣列,遇到換行為止

1 2 3 4 5

# echo "$"

1 2 3 4 5

檢視舉例

# echo $

red hat

# echo "$"  

#注意加不加引號的區別

red 

hat# echo "$"

red 

hat fedora

# echo $  

#檢視陣列的資訊,注意引號的區別

red hat fedora

# set | grep array

array=([0]="red 

hat" [1]="fedora")  

#通過set檢視變數和grep結合檢視陣列的賦值情況

2、陣列常用的變數

array[0]  

array[1]  

...... #是陣列的每個元素,根據下標指定,類似c語言,讀取時相當於變數$

$   #陣列長度

$  

#陣列的所有元素

for i in $;do ...  

#遍歷陣列,這時i就是array裡的某個元素

或者for idx in $  

#這時idx就是array的某個下標

$    #從陣列的n位置開始取m個元素

變數使用的舉例如下:

# array=('red 

hat' 'fedora')  

#賦值,第乙個元素中有多個空格

# echo $

red hat fedora  

#列印陣列,第乙個元素的空格變成乙個了

# echo "$"  

red 

hat fedora  

#加引號保持原貌

# echo $  

2  #陣列長度

# echo $

0 1  

#陣列下標

# echo $

fedora  

#獲取陣列元素

3、陣列的常用操作

(1)命令執行結果放入陣列

# array=($(ls | grep rpm))  

#建議採用($())的方式

# echo $

bind-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-devel-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-sdb-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm

# array=(`ls | grep rpm`)  

#效果相同,這個例子採用反向單引號

# echo $

bind-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-chroot-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-devel-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-libs-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-sdb-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm bind-utils-9.8.2-0.17.rc1.el6_4.4.x86_64.rpm

(2)讀入字串,給陣列賦值

i=0n=5while [ "$i" -lt $n ] ; do  

#遍歷5個輸入

echo "please input strings ... `expr $i + 1`"  

read array[$i]  

#陣列賦值

b=$echo "$b"

i=`expr $i + 1`  

#i遞增

done

(3)字串的字母逐個放入陣列,並輸出

chars='abcdefghijklmnopqrstuvwxyz'

i=0while [ "$i" -lt $ ] ; do  

#  $是字串長度

array[$i]=$  

#從$i取1個位元組

done

(4)判斷乙個變數是否在陣列中

乙個很簡潔的寫法是:

echo $ | grep -wq "$"

if [ $? -eq $success ];then

但是這會帶來乙個問題,如果array的元素裡面帶有空格,就會誤認為是乙個元素,因此遍歷比較是更穩妥的選擇。

for i in $;do

if [ "$i" = "$" ];then

.... fi

done

(5)構建二維陣列

a=('1 2 3' '4 5 6' '7 8 9')  

#賦值,每個元素中都有空格

for i in $ ; do

b=($i)  

#賦值給b,這樣b也是乙個陣列

for j in $;do  

#相當於對二元陣列操作

......

done

done

(6)檔案內容讀入陣列

# cat /etc/shells | tr "\n" " " >/tmp/tmp.file  

#回車變空格

# read -a array < /tmp/tmp.file  

#讀入陣列

# set| grep array

array=([0]="/bin/sh" [1]="/bin/bash" [2]="/sbin/nologin" [3]="/bin/tcsh" [4]="/bin/csh" [5]="/bin/dash")

bash shell之陣列使用

這次寫指令碼時用到了bash shell陣列,當初做法是配置檔案裡面寫成陣列形式a element1 element2 element3 element4 然後乙個指令碼讀取這個配置檔案,於是稍微總結了一下陣列的使用方法 bash shell中使用陣列變數 其賦值 定義有兩種 1.name valu...

bash shell 中陣列使用舉例

讓我們先來看乙個 shell 指令碼的執行過程及結果 gysl gysl devops sh array.sh n2 n3 n4 the elements of this array 2 4 are n2 n3 n4 n1 is in array.n2 is in array.n3 is in ar...

HP UX 安裝使用bash shell

hp ux 安裝使用bash shell 一.環境 lsyxdb usr local bin cat etc issue genericsysname hp release b.11.31 see etc issue lsyxdb usr local bin uname a hp ux lsyxdb...