関数は再利用可能なコードのブロックです。多くの場合、繰り返しコードを関数に入れて、さまざまな場所からその関数を呼び出します。ライブラリは関数のコレクションです。ライブラリで一般的に使用される関数を定義でき、他のスクリプトはコードを複製せずにそれらを使用できます。
この記事では、関数とレシピについて詳しく説明します。デモンストレーションの目的で、 Bourne Again SHell(Bash)を使用します Ubuntuマシンで。
関数の呼び出し
シェルでは、関数の呼び出しは他のコマンドの呼び出しとまったく同じです。たとえば、関数名がmy_funcの場合、次のように実行できます。
$ my_func
いずれかの関数が引数を受け入れる場合は、コマンドラインから次のように引数を指定できます。
$ my_func arg1 arg2 arg3
関数の定義
以下の構文を使用して関数を定義できます:
functionfunction_name{関数の本体}
関数の本体には、有効なコマンド、ループ制約、その他の関数またはスクリプトを含めることができます。次に、画面にメッセージを表示する簡単な関数を作成しましょう。
function print_msg {echo "Hello、World"}
次に、この関数を実行しましょう:
$ print_msg Hello、World
予想通り、この関数は画面にメッセージを表示します。
上記の例では、ターミナル上に直接関数を作成しました。この関数をファイルに保存することもできます。以下の例はこれを示しています。
#! / bin / bash function print_msg {echo "Hello、World"} print_msg
この関数はfunction.sh内で定義されています ファイル。次に、このスクリプトを実行しましょう:
$ chmod + x function.sh $ ./function.sh Hello、World
観察すると、上記の出力は前の出力とまったく同じです。
関数の詳細
前のセクションでは、非常に基本的な関数を定義しました。ただし、ソフトウェア開発では、さまざまなパラメータと戻り値を受け入れることができる、より高度な関数が必要です。このセクションでは、そのような機能について説明します。
関数に引数を渡す
他のコマンドと同じように機能する引数を提供できます。これらの引数には、ドル($)記号を使用して関数からアクセスできます。たとえば、$ 1は最初の引数を表し、$2は2番目の引数を表します。
メッセージを引数として受け入れるように上記の関数を変更してみましょう。変更した関数は次のようになります:
function print_msg {echo "Hello $ 1"}
上記の関数では、$1を使用して最初の引数にアクセスしています。この関数を実行してみましょう:
$ print_msg "LinuxTechi"
この関数を実行すると、次の出力が生成されます。
Hello LinuxTechi
関数からの戻り値
他のプログラミング言語と同様に、Bashは、呼び出し元に値を返すことができることを使用してreturnステートメントを提供します。例を挙げてこれを理解しましょう:
function func_return_value {return 10}
上記の関数は、呼び出し元に値10を返します。この関数を実行してみましょう:
$ func_return_value $ echo "関数によって返される値は次のとおりです:$?"
上記の関数を実行すると、次の出力が生成されます。
関数によって返される値は次のとおりです:10
注: bashでは$を使用する必要がありますか?関数の戻り値を取得する
関数レシピ
これまでのところ、bash関数については公正な考えがあります。それでは、私たちの生活を楽にするために使用できる便利なbash関数をいくつか作成しましょう。
ロガー
ログメッセージと一緒に日付と時刻を出力するロガー関数を作成しましょう。
function log_msg {echo "[` date'+%F%T' `]:[email protected]"}
この関数を実行してみましょう:
$log_msg"これはサンプルログメッセージです"
この関数を実行すると、次の出力が生成されます。
[2018-08-16 19:56:34]:これはサンプルログメッセージです
システム情報を表示する
GNU/Linuxシステムに関する情報を表示する関数を作成しましょう
function system_info {echo "### OS information ###" lsb_release -a echo "### Processor information ###" Processor =`grep -wc" Processor "/ proc / cpuinfo` model =`grep -w"モデル名"/proc / cpuinfo | awk -F:'{print $ 2}'` echo "Processor =$ Processor" echo "Model =$ model" echo "### Memory information ###" total =`grep -w" MemTotal "/ proc / meminfo || awk'{print $ 2}' `free =` grep -w "MemFree" / proc / meminfo | awk'{print $ 2}' `echo"合計メモリ:$ total kB "echo"空きメモリ:$ free kB "}
上記の関数を実行すると、次の出力が生成されます:
###OS情報###利用可能なLSBモジュールはありません。ディストリビューターID:UbuntuDescription:Ubuntu 18.04.1 LTSRelease:18.04コード名:bionic###プロセッサー情報###プロセッサー=1モデル=Intel(R)Core( TM)i7-7700HQ CPU @ 2.80GHz ###メモリ情報###合計メモリ:4015648 kB空きメモリ:2915428 kB
現在のディレクトリからファイルまたはディレクトリを検索する
以下の関数は、現在のディレクトリからファイルまたはディレクトリを検索します:
関数検索{検索。 -名前$1}
以下のコマンドを使用して、ディレクトリ、つまりdir4を検索してみましょう。
$ search dir4
上記のコマンドを実行すると、次の出力が生成されます。
./dir1/dir2/dir3/dir4
デジタル時計
以下の関数は、端末に簡単なデジタル時計を作成します
function digital_clock {clear while [1] do date +'%T'} clear1ライブラリの作成
ライブラリは関数のコレクションです。ライブラリを作成するには–ファイルに関数を定義し、そのファイルを現在の環境にインポートします。
utils.shファイルですべての関数を定義したと仮定し、以下のコマンドを使用して現在の環境に関数をインポートします。
$ source utils.sh今後は、他のbashコマンドと同じように、ライブラリから任意の関数を実行できます。
結論
この記事では、生産性を向上させるいくつかの便利なレシピについて説明しました。この記事があなた自身のレシピを作成するきっかけになることを願っています。
Linux