English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Функции Shell

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

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

[function] funname [()]
{
    action;
    [return int;]
}

Объяснение:

  • 1、Можно определить функцию с помощью function fun()  или directly fun() без параметров.

  • 2、Возврат параметра, можно показать сумму: return возвращает, если не указан, то возвращает результат последней команды. return следует за числом n (0-255)

Ниже приведен пример определения функции и ее вызова:

#!/bin/bash
# author:базовый учебник сайт
# url:ru.oldtoolbag.com
demoFun(){
    echo "Это моя первая shell-функция!"
}
echo "-----Функция начала выполнение-----"
demoFun
echo "-----Функция выполнена-----"

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

-----Функция начала выполнение-----
Это моя первая shell-функция!
-----Функция выполнена-----

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

#!/bin/bash
# author:базовый учебник сайт
# url:ru.oldtoolbag.com
funWithReturn(){
    echo "Эта функция будет производить сумму введенных двух чисел..."
    echo "Введите первое число: "
    read aNum
    echo "Введите второе число: "
    read anotherNum
    echo "Два числа равны $aNum и $anotherNum !"
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "Сумма введенных двух чисел равна $? !"

Вывод будет类似 к следующему:

Эта функция будет производить сумму введенных двух чисел...
Введите первое число: 
1
Введите второе число: 
2
Два числа равны 1 и 2 !
Сумма введенных двух чисел равна 3 !

Значение возвращаемое функцией можно получить через $? после вызова функции.

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

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

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

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

#!/bin/bash
# author:базовый учебник сайт
# url:ru.oldtoolbag.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 последнего процесса, выполняемого в фоновом режиме.
$@ Как и $*, но при использовании добавляется кавычки, и каждый параметр возвращается в кавычках.
$- Показать текущие опции Shell, аналогично команде set.
$? Показать состояние завершения последней команды. 0 означает absence of errors, any other value indicates an error.