Подтвердить что ты не робот

Как вызвать функцию в shell Scripting?

У меня есть оболочка script, которая условно вызывает функцию.

Пример: -

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

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

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

Пожалуйста, дайте мне знать, как это сделать.

4b9b3361

Ответ 1

Вы не указали, какую оболочку (many), поэтому я предполагаю Bourne Shell, я думаю, что ваш script начинается с:

#!/bin/sh

Не забудьте отметить будущие вопросы с типом оболочки, так как это поможет сообществу ответить на ваш вопрос.

Вам необходимо определить свои функции перед их вызовом. Используя ():

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

Посмотрите, как он запускается с тремя разными значениями ${choice}.

Удачи!

Ответ 2

#!/bin/bash

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

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


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

Ответ 3

Резюме:

  • Определите функции перед их использованием.
  • После определения обработайте их как команды.

Рассмотрим этот script, называемый funcdemo:

#!/bin/bash

[ $# = 0 ] && exhort "write nastygram"

exhort(){
    echo "Please, please do not forget to $*"
}

[ $# != 0 ] && exhort "write begging letter"

При использовании:

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

Обратите внимание на то, что потенциальная недостающая функция может оставаться неоткрытой в течение длительного времени (подумайте "клиентом в самый критический неверный момент" ). Это имеет значение только в том случае, существует ли функция, когда она выполняется, так же, как это имеет значение только в том случае, существует ли какая-либо другая команда при ее попытке выполнить. Действительно, пока он не выполнит команду, оболочка не знает и не заботится о том, является ли это внешней командой или функцией.

Ответ 4

Перед использованием необходимо определить функции. Механизм sh не предваряет функции, но общий способ - сделать что-то вроде:

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

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

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

main()

Ответ 5

Вы можете создать другой файл script отдельно для функций и вызвать файл script всякий раз, когда вы хотите вызвать функцию. Это поможет вам сохранить ваш код в чистоте.

Function Definition : Create a new script file
Function Call       : Invoke the script file

Ответ 6

Пример использования функции() в 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

Ответ 7

#!/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]"  

он начнется с основной функции