シェルスクリプト--shell配列base

アレイ及び変数間の差は、次のとおり、メモリ空間に占める変数が離散的であり、配列はメモリ内の配列にメモリ内の連続した大きなメモリ空間、アレイ内の各要素を開くことです。配列インデックスのロゴを使用して配列要素。

一般的な配列と連想配列:bashの、アレイの2種類があります。通常の配列は、文字列が連想配列のインデックスとして使用することができる、配列インデックスの整数値として使用することができます。いわゆる連想配列、その三他のタイトル:辞書(辞書)、ハッシュ構造及びマップ(MAP)、及びキー値は1:1の関係です。

通常の配列                            

 配列を定義する一つの方法:     

[ルート@ localhostの〜]#array_test =(1  2  3  4

彼らは、ビットに格納されている0-3位置インデックスの値に対応する[3] array_test [0] array_testあります。この時点で[0] array_test変数で表されるため、使用$への参照です。参照配列:$ {ARRAY_NAME [インデックス]}。

[ルート@ localhostの〜]#エコー $ {array_test [ 2 ]}
 3

アレイは、括弧内に定義されたセパレータとして規定された空間ではなくカンマであることに留意されたいです。あなたはコンマを使用している場合、彼らは全体として意志、それは、ゼロの配列のインデックス値です。あなたは、カンマを使用する場合は、次のようになります。

[ルート@ localhostの〜]#array_test =(1234 
[ルート@ localhostの〜]#エコー $ {array_test [ 0 ]}
 1234

2の配列を定義します。あなたは、インデックスのビットをカスタマイズすることができます。

[ルート@ localhostの〜]#array_test1 [ 1 ] = 1 
[ルート@ localhostの〜]#array_test1 [ 2 ] = 2 
[ルート@ localhostの〜]#array_test1 [ 3 ] = 3 
[ルート@ localhostの〜]#array_test1 [ 4 ] = 4
[ルート@ localhostの〜]#エコー $ {array_test1 [* ]}
 1  2  3  4

しかし定義array_test1 [7] = 7 4後インデックスビット5と6は未定義配列変数を表し、すなわち統計的変数の要素数によって確認することができ、存在しません。しかし、シェルで未定義の変数を直接参照することができますが、それらの初期値や0は空です。

(1)すべての値の配列を印刷します。

[ルート@ localhostの〜]#エコー $ {array_test1 [* ]}
 1  2  3  4

または@記号を使用します。

[ルート@ localhostの〜]#エコー$ {array_test1 [@]}
 1  2  3  4

(2)は、アレイインデックス番号を表示します。

[ルート@ localhostの〜]#エコー $ {!array_test1 [* ]}
 1  2  3  4 
[ルート@ localhostの〜]#エコー $ {!array_test1 [@]}
 1  2  3  4

(3)配列の長さと可変長配列。

[ルート@ localhostの〜]#エコー $ {#array_test1 [ 1 ]}配列変数の#表示下付文字長1
 1 
[ルート@ localhostの〜]#エコー $ {#array_test1 [* ]}#ディスプレイアレイ数(統計だけでなく、空要素)要素
 4 
[ルート@ localhostの〜]#エコーアレイにおける表示素子の$ {#array_test1 [@]}#番号(のみ統計値がnull要素ではない)
 4

連想配列                            

配列のインデックスとして連想配列のサポート文字列。あなたはそれを宣言-A宣言を使用して連想配列を使用する必要があります。

[ルート@ localhostの〜]#の宣言- array_dep 
[ルート@ localhostの〜]#array_dep =([NAME1] = longshuai [NAME2] = xiaofang)

連想配列のインデックスであるNAME1とNAME2。配列インデックスを参照する場合、変数に対応する基準値の使用を必要とします。

[ルート@ localhostの〜]#エコー$ {array_dep [NAME1]} 
longshuai

これは、個別に割り当てることができます。

[ルート@ localhostの〜]#array_dep [NAME3] = zhangsan 
[ルート@ localhostの〜]#array_dep [NAME4] = リシ
[ルート@ localhostの〜]#エコー$ {array_dep [NAME4]} 
リージ

(1)すべての配列の値を表示します。

[ルート@ localhostの〜]#エコー$ {array_dep [@]} 
zhangsan Xiaofang longshuaiリージ
[ルート@ localhostの〜]#エコー $ {array_dep [* ]} 
zhangsan Xiaofang longshuaiリージ

(2)は、アレイインデックス番号を表示します。

[ルート@ localhostの〜]#エコー$ {!array_dep [@]} 
NAME3名2名1 NAME4
[ルート@ localhostの〜]#エコー$ {!array_dep [*]} 
NAME3名2名1 NAME4

(3)統計配列の長さ。

[ルート@ localhostの〜]#   エコー $ {#array_dep [* ]}
 4 
[ルート@ localhostの〜]#   エコー$ {#array_dep [@]}
 4

置換取ら配列要素、                        

そして、インターセプトと置換変数は似ています。

[ルート@ localhostの〜]配列#=(1  2  3。 4。 5。 6。 
[ルート@ localhostの〜] = $ {#1 ARRAY0配列[*]:22 }#二つの要素の配列からすべての要素が撮影バック二つの要素アウト(すなわち、3 。4 
[ ルート@ localhostの〜] = $ {#1 ARRAY1配列[*] / 5 / 6交換するアレイ内}#5 6言っ

そこ削除と一致するように、左から右の試合に削除され、変数は同じですされています。

[ルート@ localhostの〜]#=配列(五foueスリーワンTWO)
[ルート@ localhostの〜] = $ {#1 ARRAY1配列[*] *#O#}とすべての非欲張りマッチング配列変数マッチングコンテンツを削除するために、左
[ローカルホスト@ルート〜] = $ {#の配列2アレイ[*] ## * O#}貪欲一致左、すべてのアレイ可変整合の内容を削除する
[ルート@ localhostの〜] = $ {#の配列2アレイ[*]%O }#権およびすべての非欲張りマッチング配列変数マッチングコンテンツ削除
[ルート@ localhostの〜] = $ {#の配列2アレイ[*] %%#1 O}右貪欲マッチングをし、すべての配列変数の一致を削除

forループ配列を介して                          

シェルの周期構造に配列全体名配列変数を表すために使用することができます。

[ルート@ localhostの〜]#のためのでは $ {配列[*]}; やる   エコーは $ I; 行わ
1 
2 
3 
foue 
5

または私は配列インデックスの方法となっています。

[ルート@ localhostの〜]#のためのでは $ {!配列[*]}; やる 
> エコー$ iが
 > 行わ
0 
1 
2 
3 
4

ここでは、配列の要約を通じて3つの一般的な使い方です。

アレイ=($(LS / ブート))

のための I  $ {アレイ[*]}; 行い  直接値の#方法アレイを反復
     エコー$ I
 DONE 

ため((私は= 0 ; I <$ {#配列[* ]}; I ++)); 行い    配列変数の#方法番号を反復
     エコー$ {アレイ[$ I]は}
 DONE 

ため I  $ {アレイ[*]} ;!       #反復処理する方法の配列インデックス
     エコー配列{$ [$ I]は}
 DONE

以下は、配列トラバーサルの例である:統計の数は、重複行を提出します。次のようにa.logファイルを読み込むと仮定します。

[ルート@ localhostの〜]#viのa.log 
ポートマッパ
ポートマッパ
ポートマッパ
ポートマッパ
ポートマッパ
ポートマッパ
状態
状態
のmountd 
mountdの
mountdの
mountdの
mountdの
mountdの
NFS 
NFS 
NFS_ACL 
NFS 
NFS 
NFS_ACL 
nlockmgrを
nlockmgrを
nlockmgrを
nlockmgrを
nlockmgrを
nlockmgrを

以下は、スクリプトの配列トラバーサルです。

[ルート@ localhostの〜]#viの shuzu。sh !/ binに/ bashのを

宣言 - A array_test#定义关联数组

ための ` 猫を〜/ a.log`
  ++ array_test [$ i]が
 行わ

ために J  {!array_test [* $ ]}
 やる
    のprintf " %-15s%3S \ n " $ jの:$ {array_test [$ J]}
 行います

アレイのファイルインデックスの内容を作成するために、最初のサイクルのためのスクリプトは、それぞれ、操作プラス指標の数学的な計算上の一つのインデックスからトラバース。このプロセスは、ファイルの内容及び配列変数の割り当てによってプロセスです。

これは、次のような結果になりました。

array_test [状態] = 2
array_test [NFS] = 4
array_test [マッパ] = 6
array_test [nlockmgrを〕= 6
array_test [NFS_ACL] = 2
6 = [mountdの] array_test

このステップは、反復するプロセスであり、アレイarray_testループの第二は、すべての変数のアレイであり、その値を取り出します。だから、最終的な結果を得るために:

[ルート@ localhostの〜]#bashのshuzu。SH  
ステータス:2つの
NFS:4 
ポートマッパ:6 
nlockmgrを:6 
NFS_ACL:2 
のmountd:6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/liujunjun/p/11999968.html