シェルの基本機能、5-

定義された関数

function  fname(){
    
}

若しくは

function_name(){
    
}

{ステートメント;}単純な機能のために、あるいはそうFNAME()を行います

関数呼出し

直接書き込み関数名。fnameのよう

関数にパラメータを渡します

パラメータは、位置パラメータに渡され、次のような場所に渡されたパラメータは、パラメータの形式で渡され、デフォルトのパラメータを設定することができません。

fnameはARG2 ARG1
簡単な例を次のように機能します。

fname(){
    echo $1, $2; #访问参数1和参数2
    echo "$@"; #以列表的方式一次性打印所有参数
    echo "$*"; #类似于$@,但是所有参数被视为单个实体
    return 0; #返回值
}
fname a b

異例のパラメータを説明します。

  1. "$ @を" "$ 1" "$ 2" "$ 3" に展開されます。
  2. "$ *は" cはIFSの最初の文字であり、 "$ 1C $ 2C $ 3" に展開されます。

IFSは説明:
IFSは、テキストデータを処理するとき、それは非常に便利であるシェルスクリプトで重要な概念です。IFSは、ホワイトスペース(スペースバー)、タブ(表キー)することで(Enterキー)一つまたは複数のを入力することができます。
コマンドラインの所定の区切りでIFS(内部フィールドセパレーター)、Linuxのシェルは、ワード(フィールド)に分解されます。
IFSセットアップは簡単で、一般的な変数の設定方法は似ています。

IFS=":"

推奨設定IFS、使用後のタイムリーな回復の前にIFSの元の値を保存します。

Locationパラメータの別名

エイリアス方法を設定することにより、コマンドを設定し、パラメータを渡しに行くとどのような影響を参照

[root@dns-node2 tmp]# alias lsg='ls |grep '
[root@dns-node2 tmp]# lsg sh
DaoJiShi.sh
debugsh.sh
testFunc.sh
testSet.sh

我々は、パラメータは、位置パラメータとエイリアス機能の位置と比較することができる、位置パラメータを取る関数を書きます

[root@dns-node2 tmp]# getFile(){ ls |grep $1 ;}
[root@dns-node2 tmp]# getFile txt
output.txt
[root@dns-node2 tmp]# getFile sh
DaoJiShi.sh
debugsh.sh
testFunc.sh
testSet.sh

知識機能の拡張

再帰関数

bashで、機能も再帰呼び出しを(あなたが関数自体を呼び出すことができます)をサポートしています。例えば、F(){エコー$ 1; F.ハロー;
SLEEP 1;}。

フォーク爆弾
再帰関数は機能することが可能である自分自身を呼び出します。この関数は、それ以外の場合はしていきます、終了条件を持っている必要があり
、システムがリソースを使い果たすまで、自分自身を生成、またはすべてを折りたたみます。
:(){:|:& };:
この関数は、常に新しいプロセスを生成し、最終的にサービス拒否攻撃を形成します。
関数呼び出しの前にバックグラウンドに子プロセスを&この危険なコードが派生プロセス、停止することはできません
フォーク爆弾と呼ばれています。

あなたにはNPROC /etc/security/limits.confを設定ファイルを変更することによって生成することができる最も制限することができ
、大きなプロセスの数、したがって、このような攻撃を防ぐために。
次の文は、プロセスのすべてのユーザーの数は100に制限されて生成することができます。

hard nproc 100

エクスポート機能

export -f fname導出関数、こうして、関数のスコープはつまり、子プロセスもこの機能を使用することができ、子供に拡張することができます。

[root@dns-node2 tmp]# cat testExportFunc.sh
getFile sh
[root@dns-node2 tmp]# sh testExportFunc.sh
testExportFunc.sh: line 1: getFile: command not found

[root@dns-node2 tmp]# export -f getFile
[root@dns-node2 tmp]# sh testExportFunc.sh
DaoJiShi.sh
debugsh.sh
testExportFunc.sh
testFunc.sh
testSet.sh

コマンドが返すに値を読みます

$を読む?コマンドが正常終了であれば、戻り値を取得し、0の後、終了ステータス、そうでない場合は非0。

コマンドにパラメータを渡します

スクリプトでは、コマンドラインパラメータは、コマンドラインでの位置に応じてアクセスすることができます。$ 1は、第1のパラメータは、2番目のパラメータがある
ように$ 2となります。
次の文は、最初の3つのコマンドラインパラメータを表示することができます。

echo $1 $2 $3

より一般的なアプローチは、すべてのコマンドラインパラメータを反復することです。ビットパラメータを移動するために左折するシフト指令が
設定され、スクリプトがすべてのパラメータへのアクセスに$ 1を使用することができます。次のコードは、すべてのコマンドラインパラメータを示しています。

$ cat showArgs.sh
for i in `seq 1 $#`
do
echo $i is $1
shift
done
$ sh showArgs.sh a b c
1 is a
2 is b
3 is c

おすすめ

転載: www.cnblogs.com/liaojiafa/p/11530934.html