Функции Shell

Linux shell позволяет пользователям определять функции, которые затем можно свободно вызывать в shell-скриптах.

Формат определения функции в shell следующий:

[ function ] funname [()]

{

    action;

    [return int;]

}

Примечание:

  • 1. Можно определить с помощьюfunction fun()определение, или напрямуюfun()определить без параметров.
  • 2. Для возвращаемого значения можно явно добавить:returnreturn. Если не добавить, в качестве возвращаемого значения будет использован результат последней команды.returnс последующим числовым значениемn(0-255).

В следующем примере определяется функция и вызывается:

Пример

#!/bin/bash
# автор: Пример учебника
# url:www.example.com

demoFun(){
    echo "Это моя первая shell-функция!"
}
echo "-----Функция начинает выполняться-----"
demoFun
echo "-----Выполнение функции завершено-----"

Результат вывода:

-----函数开始执行-----
这是我的第一个 shell 函数!
-----函数执行完毕-----

Далее определяется функция с операторомreturn:

Пример

#!/bin/bash
# автор: Пример учебника
# 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:

Пример

funWithReturn(){
    echo "Эта функция сложит два введённых числа..."
    echo "Введите первое число: "
    read aNum
    echo "Введите второе число: "
    read anotherNum
    sum=$(($aNum + $anotherNum))
    echo Два числа — это$aNumи$anotherNum !"
    echo $sum  # Вывести сумму двух чисел
}

Параметры функции

В Shell при вызове функции можно передавать ей параметры. Внутри тела функции значения параметров получаются в виде $n. Например, $1 представляет первый параметр, $2 представляет второй параметр...

Пример функции с параметрами:

Пример

#!/bin/bash
# автор: Пример учебника
# 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 означает отсутствие ошибки; любое другое значение указывает на ошибку.
Другие расширения