Функции Shell
Linux shell позволяет пользователям определять функции, которые затем можно свободно вызывать в shell-скриптах.
Формат определения функции в shell следующий:
{
action;
[return int;]
}
Примечание:
- 1. Можно определить с помощьюfunction fun()определение, или напрямуюfun()определить без параметров.
- 2. Для возвращаемого значения можно явно добавить:returnreturn. Если не добавить, в качестве возвращаемого значения будет использован результат последней команды.returnс последующим числовым значениемn(0-255).
В следующем примере определяется функция и вызывается:
Пример
# автор: Пример учебника
# url:www.example.com
demoFun(){
echo "Это моя первая shell-функция!"
}
echo "-----Функция начинает выполняться-----"
demoFun
echo "-----Выполнение функции завершено-----"
Результат вывода:
-----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕-----
Далее определяется функция с операторомreturn:
Пример
# автор: Пример учебника
# url:www.example.com
funWithReturn(){
echo "Эта функция сложит два введённых числа..."
echo "Введите первое число: "
read aNum
echo "Введите второе число: "
read anotherNum
echo Два числа — это$aNumи$anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo "Сумма двух введённых чисел равна $? !"
Вывод аналогичен следующему:
这个函数会对输入的两个数字进行相加运算... 输入第一个数字: 1 输入第二个数字: 2 两个数字分别为 1 和 2 ! 输入的两个数字之和为 3 !
Возвращаемое значение функции после вызова функции получается с помощью$? , чтобы получить его.
Примечание:Все функции должны быть определены до использования. Это означает, что функцию нужно разместить в начале скрипта, и её можно использовать только тогда, когда интерпретатор shell впервые с ней встретится. Чтобы вызвать функцию, просто используйте её имя.
Примечание: returnОператор return может возвращать только целое число от 0 до 255, а сумма двух введённых чисел может превышать этот диапазон.
Чтобы решить эту проблему, можно изменить оператор return и напрямую использовать echo для вывода суммы вместо использования return:
Пример
echo "Эта функция сложит два введённых числа..."
echo "Введите первое число: "
read aNum
echo "Введите второе число: "
read anotherNum
sum=$(($aNum + $anotherNum))
echo Два числа — это$aNumи$anotherNum !"
echo $sum # Вывести сумму двух чисел
}
Параметры функции
В Shell при вызове функции можно передавать ей параметры. Внутри тела функции значения параметров получаются в виде $n. Например, $1 представляет первый параметр, $2 представляет второй параметр...
Пример функции с параметрами:
Пример
# автор: Пример учебника
# url:www.example.com
funWithParam(){
echo "Первый параметр — $1 !"
echo "Второй параметр — $2 !"
echo "Десятый параметр — $10 !"
echo Десятый параметр —${10} !"
echo Одиннадцатый параметр —${11} !"
echo "Общее количество параметров — $# !"
echo "Вывести все параметры как строку $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
Результат вывода:
第一个参数为 1 ! 第二个参数为 2 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
Обратите внимание, что $10 не может получить десятый параметр; чтобы получить десятый параметр, нужно ${10}. Когда n>=10, нужно использовать ${n} для получения параметра.
Кроме того, есть несколько специальных символов, используемых для обработки параметров:
| Обработка параметров | Описание |
|---|---|
| $# | Количество параметров, переданных скрипту или функции |
| $* | Отобразить все параметры, переданные скрипту, в виде одной строки |
| $$ | Номер ID текущего процесса выполняющегося скрипта |
| $! | Номер ID последнего процесса, запущенного в фоновом режиме |
| $@ | То же, что и $*, но при использовании добавляет кавычки и возвращает каждый параметр в кавычках. |
| $- | Отобразить текущие опции, используемые Shell, с той же функцией, что и команда set. |
| $? | Отобразить статус выхода последней команды. 0 означает отсутствие ошибки; любое другое значение указывает на ошибку. |