Искусство программирования на языке сценариев командной оболочки


Программирование на языке сценариев командной оболочки - стр. 233


exit 0

Команда shift вполне применима и к аргументам функций (см. Пример 33-10).

В отличие от других языков программирования, в сценариях на языке командной оболочке, в функции передаются аргументы по значению. [50] Если имена переменных (которые фактически являются указателями) передаются функции в виде аргументов, то они интерпретируются как обычные строки символов и не могут быть разыменованы. Функции интерпретируют свои аргументы буквально.

Exit и Return

код завершения

Функции возвращают значение в виде кода завершения. Код завершения может быть задан явно, с помощью команды return, в противном случае будет возвращен код завершения последней команды в функции (0 -- в случае успеха, иначе -- ненулевой код ошибки). Код завершения в сценарии может быть получен через переменную $?.

return

Завершает исполнение функции. Команда return [51] может иметь необязательный аргумент типа integer, который возвращается в вызывающий сценарий как "код завершения" функции, это значение так же записывается в переменную $?.

Пример 22-3. Наибольшее из двух чисел

#!/bin/bash # max.sh: Наибольшее из двух целых чисел.

E_PARAM_ERR=-198 # Если функции передано меньше двух параметров. EQUAL=-199 # Возвращаемое значение, если числа равны.

max2 () # Возвращает наибольшее из двух чисел. { # Внимание: сравниваемые числа должны быть меньше 257. if [ -z "$2" ] then return $E_PARAM_ERR fi

if [ "$1" -eq "$2" ] then return $EQUAL else if [ "$1" -gt "$2" ] then return $1 else return $2 fi fi }

max2 33 34 return_val=$?

if [ "$return_val" -eq $E_PARAM_ERR ] then echo "Функции должно быть передано два аргумента." elif [ "$return_val" -eq $EQUAL ] then echo "Числа равны." else echo "Наибольшее из двух чисел: $return_val." fi

exit 0

# Упражнение: # --------------- # Сделайте этот сценарий интерактивным, #+ т.е. заставьте сценарий запрашивать числа для сравнения у пользователя (два числа).




- Начало -  - Назад -  - Вперед -