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 ファイルに追加して、毎回作成しなくても常にこれらの関数にアクセスできるようにします。
-
5 つの実用的な例を含む Bash スクリプト入門チュートリアル
進行中の Unix Sed および Unix Awk シリーズと同様に、Bash スクリプトに関するいくつかの記事を投稿します。実用的な例ですべての bash スクリプト テクニックをカバーします。 シェルは、ユーザー コマンドを解釈するプログラムです。コマンドは、ユーザーが直接入力するか、シェル スクリプトと呼ばれるファイルから読み取るかのいずれかです。ユーザーからの入力を直接読み取る場合、シェルは対話型シェルとして呼び出されます。 シェルは、ファイルからコマンドを読み取って実行するときに、非対話型シェルとして呼び出されます。この場合、シェルはスクリプト ファイルの各行を上から下に読み取
-
Excel でデータベース関数を使用する方法 (例あり)
この記事では、Excel でデータベース関数を使用する方法について説明します。 Excel には 12 のデータベース関数があります。この記事では、それらを 1 つずつ適用する方法を示します。次の図は、この記事の目的を強調しています。記事をざっと見て、残りの使い方を学んでください。 下のダウンロードボタンから練習用ワークブックをダウンロードできます。 Excel のデータベース関数の概要 Excel のデータベース関数を使用すると、特定のデータベースに対して合計、積、平均などの簡単な操作を実行できます。 Excel には 12 のデータベース関数があります。これらは、DSUM、DAVE