シェル - (7)Shell関数

シェルは、このコードは、事前によく書かれており、指定した場所に置かれ、再利用することができ、あなたが直接検索を使用することができ、いくつかのスクリプトコードの性質の関数です。


シェル関数やC ++JavaのPythonの、C #は、  他のプログラミング言語およびその他の機能に似ていますが、構文の詳細にいくつかの違い。

次のようにShell関数の構文は定義されています。

関数名(){ 
    ステートメント
    [戻り値] 
}

各セクションの説明:

  • functionシェルキーワードは、具体的機能に追加されます。
  • name関数の名前です。
  • statements、ステートメントのセットで実行される関数のコードは、です。
  • return valueこの部分は、あなたが書くことはできません書くことができます。これは、値を返す特別機能で使用されるリターンは、シェルのキーワードである関数の戻り値を、表しています。


{ }関数と呼ばれる部分囲ま体、関数が呼び出されるが、コードが実際に機能本体で実行されます。

文言を簡略化された関数定義

あなたはいない書き込みファンクションキー、あなたはそれ面倒、関数定義を見つけることができるかどうか:

名前(){ 
    ステートメント
    [戻り値] 
}

あなたがfunctionキーワードを記述する場合は、関数名の後に括弧を省略することができます:

関数名{ 
    ステートメント
    [戻り値] 
}

推奨標準文言、これは1つが理解できる「という意味の名前を知って見て」行うことができます。

第二に、関数呼び出し

Shell関数を呼び出すときに、それにパラメータを渡すことができ、あなたが渡すことはできません。あなたは、関数名に直接与えられたパラメータを渡さない場合:

名前

パラメータが渡された場合、複数のパラメータの間のスペースで区切られました:

名前のparam1 PARAM2 param3

どのような形、機能は彼の名前の後に括弧を必要としません。

そして、他のプログラミング言語ではないパラメータがShiqueコールを渡すことができ、Shell関数定義のパラメータを示し、それが受け取ったすべてのパラメータをパラメータ何を渡し、異なっています。

シェルを定義し、コールするために限定されるものではなく、あなたは、コールの前を定義することができ、あなたが変えることができ、以降の呼び出しで定義されます。

例:

1)機能、出力アドレスシェルチュートリアルの定義:

#!/ binに/ bashの
#機能定義
関数のurl(){
     エコー " http://c.biancheng.net/shell/ " 
} 
#関数呼び出しの
URLの


営業成績:
HTTP:// c.biancheng.net/shell/
 
= ================= 
あなたは、の定義の前に呼び出すことができます

2)機能の定義、およびすべてのパラメータを計算します。

#!/ binに/ bashのの
 機能GetSum(){ 
    ローカルSUM = 0 
    のための N- $ @
     DO 
         ((SUM + = N-))
     DONE 
    リターン$ SUM 
} 
GetSum 10  20は 55  15   #関数呼び出しとパラメータを渡す
 エコー $を?

結果:
100

$@すべてのパラメータは、機能を示す$?終了ステータス機能(戻り値)を表しています。

三、Shell関数のパラメータ

そして、異なる言語でのプログラミングなどのC ++、C#、Pythonの、ほとんどの、Shell関数のパラメータが定義で指定することはできませんが、Shiqueコールでパラメータを渡すことができます。

シェルパラメータは、位置パラメータの関数であり、関数内で使用することができる$n受信するために、例えば$ 1は2番目のパラメータを表し、$ 2、最初のパラメータを表します。

 

 また$n、他の三つの重要な変数があります。

  • $#あなたは、渡されたパラメータの数を取得することができます。
  • $@それとも$*、あなたはすべてのパラメータが使い捨て得ることができます

(1)関数のパラメータの例:

#!/ binに/ バッシュ

funWithParam(){ 
    エコー " 最初のパラメータ。1 $!" 
    エコー " 2番目のパラメータは2 $!である" 
    エコー " 10の10番目のパラメータ$!" 
    エコー " 10番目のパラメータは、{$ 10 }!" 
    エコー " 第十一のパラメータ。11 {} $!" 
    エコー " #$!のパラメータ番号" 
    エコー " のすべてのパラメータの文字列出力* $!" 
} 
funWithParam 。1  2  。3  。4  。5  。6  。7  。8  9  34であり、 73のIS

出力:

最初のパラメータは、1
2番目の引数がある2
10番目のパラメータである10
10番目のパラメータである34
パラメータ十一73
パラメータの総数。11
全ての出力パラメータのA列1  2  。3  。4  。5  。6  7  8  9  34は、 73であります

第十{10} $必要なパラメータを取得し、$ 10 10のパラメータを得ることができないことに留意されたいです。場合N> = 10、パラメータを取得するために$ {N}の使用を必要とします。

 

(2)実施例2:@ $トラバース関数パラメータへ。

関数の定義、およびすべてのパラメータを計算します。

#!/ binに/ bashのの
 機能GetSum(){ 
    ローカルSUMは = 0 
    のための N- $ @
     DO 
         ((SUM + = N-))
     DONE 
    エコー $ SUMの
    リターン0 
} 
#関数を呼び出すと、パラメータを渡し、最終的な結果は、変数に代入されます
合計 = $(GetSum 10  20である 55  15 エコー$合計
#変数は省略することができる
エコー $(GetSum 10  20である 55  15

結果:
100
100

3)プロセスパラメータに他の特殊文字:

パラメータ処理 説明
$# 引数の数は、スクリプトまたは関数に渡されました
$ * 単一の文字列にスクリプトに渡されるすべてのパラメータを表示します
$$ このスクリプトは、現在のプロセスID番号を実行します
$! 最後に、このプロセスはバックグラウンドのID番号で実行されています
$ @ $ *同じですが、引用符の使用、および引用符で各パラメータを返します。
$ - シェルは、現在のオプションを表示するために使用し、同じコマンド機能を設定します。
$? 最後のコマンドの終了ステータスを表示します。0手段エラーなし、それ以外の値はエラーを示しています。

四、戻り値リターン

1.持っているリターン

(1)¥?リターンの戻り値を取得します。

#!/ binに/ bashのの
 機能demoFun1(){
     エコー " これが私の最初のシェル関数である!" 
    リターン` exprは 1 + 1 ` 
} 

demoFun1 
エコー $?
これが私の最初のシェル関数である!
 2

(2)その前の命令のためにのみ責任を負う$?、関数は戻り値は、パラメータの保存、すぐにではない返すと、その値はを通じて返されることはありません  $?取得

#!/ binに/ bashのの

機能demoFun1(){
     エコー これが私の最初のシェル関数である!
    リターン` exprは 1 + 1 ` 
} 

demoFun1 
エコー $?#すぐに戻り値を取得するために呼び出す関数の後、あなたはの戻り値を取得することができ
 、エコーを $?#関数呼び出しの後、上記の実行された他の注文は、関数呼び出しの戻り値よりも小さい得るが、コマンドで得られた結果(単一のコマンドでは、のために?結果の実装$ 0エコー)

結果:

これが私の最初のシェル関数である!
 2 
0

2.ノーリターン

シェルが戻らない場合、デフォルトのretur 0

シェル言語0は、偽のために0以外の値をtrueを表します。

条件文として使用することができる機能やコマンドの実装の3結果。

1.プリントリターン結果

例1:

#!/ binに/ bashの

エコー " のHello World!" | grepを - Eこんにちは
 エコー $?


結果オペレーティング:
Hello Worldのを0

例2:

エコー " !のHello World " | grepを - Eさようなら
 エコー?$の

結果:
1

grepが与えられた文字列コマンドからマッチングコンテンツを見つけることです。見つからない場合は、最初の内容の一致が見つかった場合は、印刷のマッチング部分と戻り値$が見る?0、戻り値は$?1です。

条件ならば、戻り値が決定される2

#!/ binに/ bashの

場合 エコー " Hello Worldの!" | グレップ - 電子こんにちは
 、その後
    エコー 
そうでない
    エコー 
Fiを提供して

いる場合 、エコー のHello World! | グレップ - 電子さようならは
 その後、
    エコー 
そうでない
    エコー 
Fiを提供して


结果运行:
Hello Worldのを

戻り値は$?1のとき、grepコマンドは、それぞれ、これらの二つは、に失敗したこと、?0で、正常に実装され、条件文が真である、$の戻り値を来る、かどうかを判断するための条件文として実行します条件文はfalseです。

========

#!/ binに/ bashのの

機能demoFun1(){ 
    リターン0 
} 

関数demoFun2(){ 
    リターン12 
} 

場合demoFun1は
 その後、
    エコー 
そうでない
    エコー 
Fiを提供して

いる場合demoFun2
 その後、
    エコートゥーレ
 それ以外の
    エコー 
Fiの

demoFun1の戻り値が0、demoFun2戻り値であり、任意の異なる整数ここで0、12を選択する機能テストの戻り値として。

決意の場合は条件文の機能としては、戻り値は、0であるまだ本当星である、そして、条件文が偽であると判断されない場合は、値0を返します。

おすすめ

転載: www.cnblogs.com/zhzhlong/p/12549531.html