How to call a function in shell Scripting?

后端 未结 7 990
情话喂你
情话喂你 2020-12-05 05:06

I have a shell script which conditionally calls a function.

For Example:-

if [ \"$choice\" = \"true\" ]
then 
  process_install
elif [ \"$choice\" =          


        
相关标签:
7条回答
  • 2020-12-05 05:41

    The functions need to be defined before being used. There is no mechanism is sh to pre-declare functions, but a common technique is to do something like:

    main() {
      case "$choice" in
        true)  process_install;;
        false) process_exit;;
      esac
    }
    
    process_install()
    {
      commands...
      commands...
    }
    
    process_exit()
    {
      commands...
      commands...
    }
    
    main()
    
    0 讨论(0)
  • 2020-12-05 05:46

    Summary:

    • Define functions before using them.
    • Once defined, treat them as commands.

    Consider this script, called funcdemo:

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

    In use:

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

    Note the potential for a missing function to lie undiscovered for a long time (think 'by a customer at the most critical wrong moment'). It only matters whether the function exists when it is executed, the same as it only matters whether any other command exists when you try to execute it. Indeed, until it goes to execute the command, the shell neither knows nor cares whether it is an external command or a function.

    0 讨论(0)
  • 2020-12-05 05:50

    You don't specify which shell (there are many), so I am assuming Bourne Shell, that is I think your script starts with:

    #!/bin/sh
    

    Please remember to tag future questions with the shell type, as this will help the community answer your question.

    You need to define your functions before you call them. Using ():

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

    Then you can call your functions, just as if you were calling any command:

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

    You may also wish to check for invalid choices at this juncture...

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

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

    Good luck!

    0 讨论(0)
  • 2020-12-05 05:53
    #!/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 "$@"  
    

    it will start from the main function

    0 讨论(0)
  • 2020-12-05 05:55

    You can create another script file separately for the functions and invoke the script file whenever you want to call the function. This will help you to keep your code clean.

    Function Definition : Create a new script file
    Function Call       : Invoke the script file
    
    0 讨论(0)
  • 2020-12-05 05:57

    Example of using a function() in bash:

    #!/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 讨论(0)
提交回复
热议问题