2011-11-19 16 views
14

私は条件付きで関数を呼び出すシェルスクリプトを持っています。例についてはシェルスクリプトで関数を呼び出す方法は?

: -

if [ "$choice" = "true" ] 
then 
    process_install 
elif [ "$choice" = "false" ] 
then 
    process_exit 
fi 

process_install() 
{ 
    commands... 
    commands... 
} 

process_exit() 
{ 
    commands... 
    commands... 
} 

私はこれを実現する方法を教えてください。 bashで

答えて

14

あなたはどのシェル(manyがある)ので、私はそれは私があなたのスクリプトで始まると考えている、Bourne Shellを想定していますが指定されていませんこれはコミュニティがあなたの質問に答えるのに役立ちます。

を定義してから、を呼び出す必要があります。 ()の使用:

process_install() 
{ 
    echo "Performing process_install() commands, using arguments [${*}]..." 
} 

process_exit() 
{ 
    echo "Performing process_exit() commands, using arguments [${*}]..." 
} 

次に、あなたが任意のコマンドを呼んでいたかのように、あなたの関数を呼び出すことができます。

if [ "$choice" = "true" ] 
then 
    process_install foo bar 
elif [ "$choice" = "false" ] 
then 
    process_exit baz qux 

ます。また、この時点で無効な選択肢のために確認したいことがあります...

else 
    echo "Invalid choice [${choice}]..." 
fi 

See it run with three different values of ${choice}.

幸運!

+0

こんにちは@Johnsyweb、私は私の例とあなたの違いを発見していない...簡単に説明してください....ありがとう... – user626206

+0

私の例では、と呼ばれる。 – Johnsyweb

0

(関数の使用例を):

#!/bin/bash 
# file.sh: a sample shell script to demonstrate the concept of Bash shell functions 
# define usage function 
usage(){ 
    echo "Usage: $0 filename" 
    exit 1 
} 

# define is_file_exists function 
# $f -> store argument passed to the script 
is_file_exists(){ 
    local f="$1" 
    [[ -f "$f" ]] && return 0 || return 1 
} 
# invoke usage 
# call usage() function if filename not supplied 
[[ $# -eq 0 ]] && usage 

# Invoke is_file_exits 
if (is_file_exists "$1") 
then 
echo "File found: $1" 
else 
echo "File not found: $1" 
fi 
+0

こんにちは@Authman Apatiraから開始します、あなたのreply.Pleaseのためのおかげで私のシナリオの例を提供する... – user626206

+1

書くことがより簡潔になります「'あなたのファイル存在関数で[[-f "$ f"]] ''を返しますか? –

+0

こんにちは@ジョナサン・レフラー、その動作していません。シナリオごとに例を挙げてください...ありがとうございます。 – user626206

8
#!/bin/bash 

process_install() 
{ 
    commands... 
    commands... 
} 

process_exit() 
{ 
    commands... 
    commands... 
} 


if [ "$choice" = "true" ] then 
    process_install 
else 
    process_exit 
fi 
+3

+1およびスタックオーバーフローへようこそ。あなたの答えは何をすべきかを示していますが、少しの説明からも恩恵を受けるでしょう。質問者は、あなたが書いたものと彼らが得たものとの間の顕著な違いに気付かないかもしれません。 –

+4

「then」の前にセミコロンがありません。 – camh

1

概要:

  • は、それらを使用する前に、関数を定義します。
  • 定義されると、それらをコマンドとして扱います。

    $ funcdemo 
    ./funcdemo: line 3: exhort: command not found 
    $ funcdemo 1 
    Please, please do not forget to write begging letter 
    $ 
    

    注意が不足している機能のための潜在的な顧客によって長い時間(と思う」の未知の横に:使用の際には

    #!/bin/bash 
    
    [ $# = 0 ] && exhort "write nastygram" 
    
    exhort(){ 
        echo "Please, please do not forget to $*" 
    } 
    
    [ $# != 0 ] && exhort "write begging letter" 
    

すると、このスクリプトを考えてみましょう、funcdemoと呼ばれます最も重大な間違った瞬間に」)。関数が実行されたときに関数が存在するかどうかは、実行するときに他のコマンドが存在するかどうかだけが重要です。実際に、コマンドを実行するまで、シェルは外部コマンドか関数かを知らないし気にもしません。

#!/bin/sh 

シェルと将来の質問にタグを付けることを忘れないでください:

1

機能を使用する前に定義する必要があります。機構がないことは事前に宣言する機能にshのですが、一般的な手法は以下のように何かをすることです:あなたは機能のために別々に別のスクリプトファイルを作成し、呼び出したいときはいつでも、スクリプトファイルを呼び出すことができ

 
main() { 
    case "$choice" in 
    true) process_install;; 
    false) process_exit;; 
    esac 
} 

process_install() 
{ 
    commands... 
    commands... 
} 

process_exit() 
{ 
    commands... 
    commands... 
} 

main() 
1

を関数。これにより、コードをきれいに保つのに役立ちます。

Function Definition : Create a new script file 
Function Call  : Invoke the script file 
-1
#!/bin/bash 
# functiontest.sh a sample to call the function in the shell script 

choice="true" 
function process_install 
{ 
    commands... 
} 

function process_exit 
{ 
    commands... 
} 

function main 
{ 
    if [[ "$choice" == "true" ]]; then 
     process_install 
    elif [[ "$choice" == "false" ]]; then 
     process_exit 
    fi 
} 

main "[email protected]" 

それが主な機能

+0

コードをハイライト表示してCtrl + Kキーを押してフォーマットしてください – WhatsThePoint

関連する問題