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

6つの実用的な例を含むBashシェル関数のチュートリアル

Bash シェル関数は、グループに単一の名前を使用して、後で実行するために複数の UNIX / Linux コマンドをグループ化する方法です。 . Bash シェル関数は、通常の Unix コマンドと同じように実行できます。シェル関数は、それらを解釈するための新しいプロセスを作成することなく、現在のシェル コンテキストで実行されます。

bash エイリアスと関数の両方を使用すると、より長い、またはより複雑なコマンドのショートカットを定義できます。ただし、エイリアスは、このチュートリアルで説明されているように、これらの関数が許可する制御フロー、引数、およびその他の巧妙なものを許可しません。

この記事は、進行中の bash チュートリアル シリーズの一部です。 bash の紹介、bash の存在ステータス、bash エイリアスの例については、以前のチュートリアルを参照してください。

bash 関数を作成するための構文:

function functionname()
{
commands
.
.
}
  • 関数 はオプションのキーワードです。
  • 関数名 関数の名前です
  • コマンド – 関数内で実行されるコマンドのリスト

関数は引数を受け入れます。実行中、関数への引数は定位置パラメーターになります。定位置パラメーター 0 には、変更されないままのスクリプト名があります。

以下に示すように、コマンドラインから bash 関数を呼び出すことができます:

$ functionname arg1 arg2
  • シェルが Linux コマンドを解釈するとき、最初に break、continue、eval、exec などの特別な組み込み関数を調べ、次にシェル関数を探します。
  • bash 関数の終了ステータスは、関数本体で実行された最後のコマンドの終了ステータスです。

注: シェル関数の定義をシェル起動ファイル (.bash_profile など) に配置します。このように、コマンド ラインからいつでもシェル関数を使用できます。 .bash_profile がいつ実行されるかを確認するには、以前の bash 実行シーケンスの記事を参照してください。

例 1:指定された拡張子を持つファイルの長いリストを表示する関数

関数「lsext」は、以下に示すように、指定された拡張子を持つ現在のディレクトリ内のファイルのリストを見つけるために使用されます。この関数は、find コマンドと ls コマンドの組み合わせを使用してジョブを完了します。

$ function lsext()
{
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}

$ cd ~

$ lsext txt
-rw-r--r-- 1 root root   24 Dec 15 14:00 InMorning.txt
-rw-r--r-- 1 root root  184 Dec 16 11:45 Changes16.txt
-rw-r--r-- 1 root root  458 Dec 18 11:04 Changes18.txt
-rw-r--r-- 1 root root 1821 Feb  4 15:01 ChangesOfDB.txt

例 2. ファイルのグループに対して特定の Linux コマンドを実行する Bash 関数

次の例では、関数「batchexec」は、指定された拡張子を持つファイルを検索し、それらの選択されたファイルに対して指定されたコマンドを実行します。

$ function batchexec()
{
find . -type f -iname '*.'${1}'' -exec ${@:2}  {} \; ;
}

$ cd ~

$ batchexec sh ls

$ batchexec sh chmod 755

$ ls -l *.sh
-rwxr-xr-x 1 root root  144 Mar  9 14:39 debug.sh
-rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh
-rwxr-xr-x 1 root root   22 Mar 18 08:32 t.sh

上記の例では、.sh 拡張子を持つすべてのシェル スクリプト ファイルを検索し、そのアクセス許可を 755 に変更します (ユーザーのすべてのアクセス許可、グループおよびその他の読み取りと実行のアクセス許可)。関数定義では、2 番目以降の位置パラメータを与える「${@:2}」に気付くでしょう (シェル展開機能)。

例 3. ランダム パスワードを生成する Bash 関数

次の関数は、指定された長さの特殊文字を含むランダムな強力なパスワードを生成するために使用されます。長さがデフォルトで指定されていない場合、12 文字の長さで生成されます。

$ function rpass() {
        cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

上記の例では、引数 6 を指定して rpass を実行すると、6 文字のランダムなパスワードが生成され、引数なしで rpass を実行すると、12 文字の長さのパスワードが生成されます。

例 4. 特定のインターフェースの IP アドレスを取得する Bash 関数

次の例では、インターフェイス名を引数として受け取り、マシンの特定のインターフェイスに割り当てられた IP アドレスを与える「getip」という関数を定義しています。 (デフォルトでは eth0 ip address を返します)。これは、ifconfig コマンドを使用して IP アドレスを取得します。

$ function getip()
{
/sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
}

$ getip
15.110.106.86

$ getip eth0
15.110.106.86

$ getip lo
127.0.0.1

例 5. マシンの詳細を表示する Bash 関数

この例では、マシンに関するすべての必要な情報を提供する関数を定義しています。ユーザーは起動ファイルでこの関数を定義して呼び出すことができるため、起動時にこれらの情報を取得できます。

$ function mach()
{
    echo -e "\nMachine information:" ; uname -a
    echo -e "\nUsers logged on:" ; w -h
    echo -e "\nCurrent date :" ; date
    echo -e "\nMachine status :" ; uptime
    echo -e "\nMemory status :" ; free
    echo -e "\nFilesystem status :"; df -h
}

$ mach
Machine information:
Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux

Users logged on:
root     pts/2    ptal.mot Wed10    0.00s  1.35s  0.01s w -h

Current date :
Thu Mar 18 11:59:36 CET 2010

Machine status :
 11:59:36 up 7 days, 3 min,  1 user,  load average: 0.01, 0.15, 0.15

Memory status :
             total       used       free     shared    buffers     cached
Mem:       2059768    2033212      26556          0      81912     797560
-/+ buffers/cache:    1153740     906028
Swap:      4192956      48164    4144792

Filesystem status :
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              12G   12G     0 100% /
tmpfs                1006M  377M  629M  38% /dev/shm
/dev/sdc5             9.9G  409M  9.0G   5% /mydisk

例 6:ls 出力をより適切にフォーマットするための Bash 関数

次の関数は、画面をクリアし、カーソルを画面の上部に置き、ls を実行してから、カーソルを画面の最後に置きます。

$ function ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
}

$ ll

type コマンドを使用して機能コードを表示する

type は、関数コードを表示するために使用されるシェル組み込みです。

Syntax:
type function-name
$ type ll
ll is a function
ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
    alias ls="ls --color=auto -F"
}

簡単に参照できるように、このサンプルの .bash_profile 関数ファイルから、この記事で言及されている 6 つの関数をすべて取得してください。

これらすべての関数を ~/.bash_profile ファイルに追加して、毎回作成しなくても常にこれらの関数にアクセスできるようにします。


Linux
  1. シェル変数の関数?

  2. 例を含む Bash If-Else ステートメント

  3. 実際の例を含む Bash シェルの終了ステータスのチュートリアル

  1. Bash初心者シリーズ#9:Bashでの関数の使用

  2. Awk チュートリアル:3 つの実践例で Awk 変数を理解する

  3. 15 の便利な Bash シェル組み込みコマンド (例付き)

  1. 例を使用してBashスクリプトを作成する方法

  2. 15 の例を含む究極の Bash Array チュートリアル

  3. Perl 配列参照と逆参照のチュートリアルと実践例