GNU/Linux >> Linux の 問題 >  >> Linux

Bash関数とその使用方法{変数、引数、戻り値}

はじめに

bash関数は、再利用可能なコードブロックをグループ化するためにシェルスクリプトで使用されるメソッドです。この機能は、プロシージャ、メソッド、サブルーチンなどのさまざまな名前で知られているほとんどのプログラミング言語で使用できます。

この記事では、bash関数の完全な概要、それらの機能、およびそれらの使用方法について説明します。

前提条件

  • Linuxを実行しているシステム。
  • ターミナルとBashシェルへのアクセス。
  • bashスクリプトを作成するためのテキストエディタ(ガイドではVimを使用しています)。

Bash関数とは何ですか?

bash関数は、後で使用できるように、コードの再利用可能なビットを1つの名前にグループ化するための手法です。 bash関数は、スクリプト内のスクリプトのようなものです。

bashスクリプトで関数を使用すると、2つの利点が得られます。 :

1.関数はシェルのメモリに直接読み込まれ、後で使用するために保存されます。最近はコンピュータのメモリが問題にならないため、関数の使用は高速です。 コードを繰り返すよりも。

2.関数は、長いシェルスクリプトをモジュール式で再利用可能なコードブロックに編成するのに役立ちます。チャンクは開発と保守が簡単です

Bash関数の使用方法

Bash関数を実装する方法は2つあります。

  • シェルスクリプト内。関数を呼び出す前に関数定義を指定する必要があります。
  • 他のbashエイリアスコマンドと一緒に、コマンドとしてターミナルに直接入力します。

bash関数を使用するには、以下の概要に従ってください。

Bash関数の構文

bash関数を宣言する方法は2つあります。

1.最も広く使用されている形式は次のとおりです。

<function name> () { 
        <commands> 
}

または、同じ関数を1行にすることもできます:

<function name> () { <commands>; }

2. bash関数を作成する別の方法は、予約語 functionを使用することです。

function <function name> {
        <commands>
}

または1行で:

function <function name> { <commands>; }

関数を使用するときは、次の動作とヒントに注意してください。

  • 1行で書き込む場合、コマンドはセミコロン( ;)で終了する必要があります )、bashスクリプトまたはターミナルで直接。
  • functionの追加 予約語は括弧をオプションにします。
  • 中括弧の間のコマンド{ <commands> } 関数の本体と呼ばれます 。本文には、任意の数の宣言、変数、ループ、または条件文を含めることができます。
  • 関数にはわかりやすい名前を使用してみてください。関数やコマンドをテストする場合は必要ありませんが、説明的な名前は、他の開発者がコードを見る設定に役立ちます。

関数を宣言して呼び出す方法

宣言されたときに関数は実行されません。関数の本体は、宣言後に呼び出されると実行されます。以下の手順に従って、さまざまな構文オプションを使用してbashスクリプトを作成します。

1.お気に入りのテキストエディタを使用して、構文というシェルスクリプトを作成します。 。 Vimを使用している場合は、ターミナルで次の行を実行します。

vim syntax.sh

2.以下のコードをシェルスクリプトに追加します。

# syntax.sh
# Declaring functions using the reserved word function
# Multiline
function f1 {
        echo Hello I\'m function 1
        echo Bye!
}
# One line
function f2 { echo Hello I\'m function 2; echo Bye!; }

# Declaring functions without the function reserved word
# Multiline
f3 () { 
        echo Hello I\'m function 3
        echo Bye!
}
# One line
f4 () { echo Hello I\'m function 4; echo Bye!; }

# Invoking functions
f4
f3
f2
f1

スクリプトは次のことを行います:

  • 4〜9行目 functionを使用して関数を定義する方法を示します 予約語。関数f1 4〜6行目で複数行の構文を使用しているのに対し、 f2 9行目に1行の構文を使用します。
  • 13〜18行目 より馴染みのある構文を示します。 f3 f4は、13〜16行目で定義されている複数行の関数です。 18行目は1行に相当します。
  • 21〜24行目 以前に定義された関数を呼び出し、対応する関数の本体でコマンドを実行します。呼び出しは、定義とは逆の順序で行われます。

3.スクリプトを保存してVimを閉じます:

:wq

4. syntax.shを作成します 実行可能ファイル:

chmod +x syntax.sh

5.最後に、スクリプトを実行して出力を確認します。

./syntax.sh

ターミナルで関数を宣言して呼び出す方法

ターミナルで関数を宣言して使用するには:

1.ターミナルを開き、次の行を入力します。

my_function () { echo "Hello I'm a function"; echo "Bye!"; }

2.ターミナルに関数の名前を入力して、関数を実行します。

my_function

出力は、関数の本体でコマンドを実行します。

関数は、現在のターミナルセッションでのみ定義されたままになります。今後のセッションのために保存するには、コードを〜/ .bashrcに追加します ファイル。

Bash関数はどこで定義されていますか?

bash関数が定義されている場所とその内容を確認するには、ターミナルで次のコマンドを入力します。

1.デバッガモードでbashシェルを実行します:

bash --debugger

2.関数のソースファイルを次のように確認します:

declare -F <function name>

例:

declare -F my_function

出力には、関数の名前、行番号、および関数定義があるファイルの場所が出力されます。

3.関数の内容を確認するには、次を実行します。

declare -f <function name>

例:

declare -f my_function

declare デバッグモードに組み込まれているため、コードを実行しなくても関数の内容と場所を表示できます。

Bash関数を削除するにはどうすればよいですか?

現在のターミナルセッションで関数が占有している名前空間を解放する必要がある場合は、次を実行します。

unset <function name>

例:

unset my_function

この機能は、現在のターミナルセッションでは使用できなくなりました。ただし、コードが〜/ .bashrcにある場合 ファイルの場合、次のセッションですべてが通常の状態に復元されます。

Bash関数変数

bashの変数はデフォルトでグローバルであり、関数本体を含むどこからでもアクセスできます。関数内で定義された変数もグローバルです。キーワードlocalを追加する 関数と子関数/プロセス内でのみ用語にアクセスできるようにします。

動的スコープ 、ローカル変数シャドウ 2つが同じ名前を持つ場合のグローバル変数。

次のbashスクリプトを試して、関数変数がbashでどのように機能するかを示してください。

1. variable.shというスクリプトを作成します :

vim variable.sh

2.次のコードをスクリプトに追加します。

var1=1
var2=1
change() {
        echo Inside function
        echo Variable 1 is: $var1
        echo Variable 2 is: $var2
        local var1=5
        var2=5
        echo
        echo After change inside function
        echo Variable 1 is locally $var1
        echo Variable 2 is globally $var2
}
echo Before function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2
echo
change
echo
echo After function invocation
echo Variable 1 is: $var1
echo Variable 2 is: $var2

スクリプトは次のことを示しています:

  • 1〜2行目 変数を宣言するvar1 およびvar2 両方を1に設定します
  • 5〜6行目 関数の本体の中にあり、変数をコンソールに出力します。変数スコープはグローバルであるため、元の値が出力されます。
  • 7行目 グローバル変数var1と同じ名前の新しいローカル変数を宣言します local var1 グローバルなvar1をシャドウイングします 動的スコープによる値。
  • 8行目 グローバルvar2の値を変更します 変数。
  • 14〜22行目 関数を呼び出す前後の変数値を出力します。

3.スクリプトを保存してVimを終了します:

:wq

4.ファイルのアクセス許可を実行可能ファイルに変更します:

chmod +x variable.sh

5.スクリプトを実行し、結果を分析します。

./variable.sh

変数値は、スクリプトで行われた変更を通じてコン​​ソールに出力されます。

Bash関数の引数

関数に引数を渡すには、関数呼び出しの後にスペースで区切ってパラメーターを追加します。次の表は、bash関数の引数を操作するときに使用できるオプションの概要を示しています。

引数 役割
$0 ターミナルで定義されたときに関数の名前を予約します。 bashスクリプトで定義されている場合、 $0 スクリプトの名前と場所を返します。
$1 $2 、など。 関数名の後の引数の位置に対応します。
$# 関数に渡された位置引数の数を保持します。
[email protected] および$* 位置引数リストを保持し、このように使用した場合も同じように機能します。
"[email protected]" リストを展開して文字列を区切ります。例: "$1", "$2" 、など。
"$*" リストを単一の文字列に展開し、パラメータをスペースで区切ります。例: "$1 $2" など

以下の手順に従って、関数でさまざまな引数がどのように機能するかをテストします。

1.引数というスクリプトを作成します :

vim arguments.sh

2.次のコードをスクリプトに追加します。

arguments () {
        echo The function location is $0
        echo There are $# arguments
        echo "Argument 1 is $1"
        echo "Argument 2 is $2"
        echo "<[email protected]>" and "<$*>" are the same.
        echo List the elements in a for loop to see the difference!
        echo "* gives:"
        for arg in "$*"; do echo "<$arg>"; done
        echo "@ gives:"
        for arg in "[email protected]"; do echo "<$arg>"; done
}

arguments hello world

3.スクリプトを保存してVimを終了します:

:wq

4.スクリプトを実行可能にします:

chmod +x arguments.sh

5.スクリプトを実行します:

./arguments.sh

出力には、使用された引数ごとに説明メッセージが表示されます。

Bash関数の戻り値

Bash関数は、関数から値を返すことに関しては、ほとんどのプログラミング言語とは異なります。デフォルトでは、bashは終了ステータスを返します 関数の本体で最後に実行されたコマンドの。

以下のスクリプトは、returnを使用して終了ステータスを指定する方法を示しています。

1.スクリプトを作成し、 test.shという名前を付けます :

vim test.sh

2.次の関数をファイルに追加します。

test_function() {
        echo Test
        return 100
}
echo The function\'s output is: 
test_function
echo The exit status is:
echo $?

3.テキストエディタを保存して閉じます:

:wq

4.権限を変更します:

chmod +x test.sh

5.スクリプトを実行して、関数の出力と終了ステータスを確認します。

./test.sh

別の方法 関数の結果をエコーし​​、出力を変数に割り当てることです。 test.shを編集します 次のコードを使用したスクリプト:

test_function() {
        echo Test
}
result=$(test_function)
echo $result is saved in a variable for later use

この方法は、関数を使用するときにほとんどのプログラミング言語がどのように機能するかを模倣しています。


Linux
  1. Bash履歴コマンドの使用方法

  2. Bash で関数を作成して呼び出す方法

  3. bash 関数を設定解除または削除するにはどうすればよいですか?

  1. Bashスクリプトでifelse条件文を使用する方法

  2. シェルスクリプトで入力を使用する方法

  3. Awk内のBashスクリプトでBash関数を呼び出す方法は?

  1. ファイルの行をコマンドの引数として使用するにはどうすればよいですか?

  2. bashでkill SIGUSR2を使用するには?

  3. 2 つの引数を持つエイリアスで $1 を適切に使用する方法