シェルにおける機能の簡単な紹介
関数を使うと、複雑な機能をモジュールに分割することができ、プログラムの構造が明確になり、コードの再利用性が高まります。他のプログラミング言語と同様、シェルは関数をサポートしており、関数は使用する前に定義する必要があります。
1. シェル関数の定義形式
function キーワードで function fun_name() を使って定義することもできますし、関数名 fun_name() を直接与えて定義することもできます。引数を取ることはできません。関数名は一意でなければならず、作成時に引数を渡すには
$1,$2,... ,$* ,$@
で引数を取得します。コードを読みやすくするために、関数の定義にはfunctionキーワードを使用することが推奨されています。定義の書式は次の通りです。
function_name()
{
list of commands
[ return value ]
}
# or
function_name()
{
list of commands
[ return value ]
}
関数の戻り値として、明示的に return 文を追加することができます。追加しない場合は、最後に実行したコマンドの結果が戻り値となります。
シェル関数の戻り値は整数値のみで、一般に関数の成否を表すのに使われ、0が成功、それ以外が失敗を表します。文字列のような他のデータを返すと、しばしば "数値引数が必要" というエラーが発生することがあります。
関数が文字列を返すようにしたい場合は、関数の計算結果を受け取る変数を定義しておけば、スクリプトは必要なときにこの変数にアクセスして関数の戻り値を取得することができる。
#! /bin/bash
funcWorld()
{
echo "world"
}
res=`funcWorld`
echo "hello $res"
実行結果。
ハローワールド
2. シェル関数の呼び方
スクリプトの中で関数を呼び出すには、関数名を指定するだけです。例えば、サブセクション "1 で関数 funcWorld() を呼び出すには、以下のようにします。
3. シェル関数の戻り値の取得
を使用する。
$?
で取得します。
$?
直前のコマンドの終了状態と関数の戻り値の両方を取得することができます。ここで、Shell関数の呼び出しがShellコマンドの実行と非常によく似ていることがさらにわかります。
#! /bin/bash
add()
{
varAddRes=`expr $1 + $2`
return $varAddRes
}
add 1 2 # Call the function, passing parameters
echo $?
実行結果。
3
4. シェル関数でのローカル変数の定義
シェル関数で定義された変数は、デフォルトではグローバルで、そのスコープは関数が呼び出されたときに変数が定義された場所から始まり、シェルの終了または削除が示された場所で終了します。関数内で定義された変数は、local キーワードを使用してローカルとして表示することができ、そのスコープは関数内に制限されます。しかし、関数の引数はローカルであることに注意してください。
#! /bin/bash
function test()
{
local localVar=dablelv # local variables
}
test
echo $localVar # output is empty
5. シェル関数を使用する場合、前置詞は必要ですか?
シェル関数は、使用する前に定義する必要があります。一般的な方法は、スクリプトの最初に関数の定義を記述することです。
6. シェル関数の削除
変数の削除と同様に、関数の削除もunsetコマンドで行うことができますが、その場合は
-f
オプションを使用すると、次のようになります。
unset -f function_name
7. コマンドラインでの関数の使用
コマンドラインで関数を使用したい場合、コマンドラインで関数定義を実行する必要があります。コマンドラインで直接シェル関数を定義することの欠点は、シェルを終了すると関数定義が無効になってしまうことです。ホームディレクトリにある .bash_profile ファイルや、すべてのユーザが利用できる /etc/profile ファイルに関数を定義しておけば、ログインするたびにプロファイルファイルが呼び出され、コマンドプロンプトの後で関数名を入力すればすぐに呼び出すことができます。
注:ファイルを修正した後、すぐに反映させるためには、以下のように
source /etc/profile
または
source ~/.bash_profile
そうでない場合は、次にログインし直したときにのみ有効になります。
上記はシェルの機能の詳細ですが、シェルの機能についてはスクリプトハウスの他の関連記事にもご注目ください
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン