Как вызвать функцию в shell Scripting?
У меня есть оболочка script, которая условно вызывает функцию.
Пример: -
if [ "$choice" = "true" ]
then
process_install
elif [ "$choice" = "false" ]
then
process_exit
fi
process_install()
{
commands...
commands...
}
process_exit()
{
commands...
commands...
}
Пожалуйста, дайте мне знать, как это сделать.
Ответы
Ответ 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]"
он начнется с основной функции