2011-11-19 2 views
14

조건부로 함수를 호출하는 쉘 스크립트가 있습니다. 예를 들어쉘 스크립팅에서 함수를 호출하는 방법은 무엇입니까?

: -

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

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

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

날이 작업을 수행하는 방법을 알려 주시기 바랍니다. 떠들썩한 파티에서() 함수를 사용

답변

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

... – user626206

+1

그것은 '쓰기 더 간결 것' 파일 존재 함수에서 [[-f "$ f"]]' '를 반환하겠습니까? –

+0

안녕하세요 @ 조나단 Leffler, 그 작동하지 않습니다. 제 시나리오대로 예제를 제공해주십시오 ... 고마워요. – 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]" 
는 메인 함수에서 시작됩니다

안녕 @Authman Apatira, 당신의 reply.Please 주셔서 감사합니다 내 시나리오에 대한 예제를 제공
+0

코드를 강조 표시하고 Ctrl + K를 눌러 코드를 포맷 해 주실 수 있습니까? – WhatsThePoint

관련 문제