Funciones de Shell
Linux Shell permite a los usuarios definir funciones y luego llamarlas libremente en scripts de shell.
El formato de definición de funciones en shell es el siguiente:
{
action;
[return int;]
}
Explicación:
- 1. Puede usarfunction fun()definición, o también directamentefun()definir sin ningún parámetro.
- 2. En cuanto al retorno de parámetros, se puede agregar explícitamente:returnreturn; si no se agrega, se tomará el resultado de la última ejecución del comando como valor de retorno.returnseguido de un valor numérico.n(0-255).
El siguiente ejemplo define una función y la llama:
Ejemplo
# autor: Ejemplo
# url:www.example.com
demoFun(){
echo ¡Esta es mi primera función de shell!
}
echo -----La función comienza a ejecutarse-----
demoFun
echo -----La función ha terminado de ejecutarse-----
Resultado de salida:
-----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕-----
A continuación se define una función con unareturninstrucción return:
Ejemplo
# autor: Ejemplo
# url:www.example.com
funWithReturn(){
echo Esta función sumará los dos números ingresados...
echo Ingrese el primer número:
read aNum
echo Ingrese el segundo número:
read anotherNum
echo Los dos números son respectivamente$aNumy$anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn
echo ¡La suma de los dos números ingresados es $?!
La salida es similar a la siguiente:
这个函数会对输入的两个数字进行相加运算... 输入第一个数字: 1 输入第二个数字: 2 两个数字分别为 1 和 2 ! 输入的两个数字之和为 3 !
El valor de retorno de la función se obtiene después de llamar a la función mediante$? para obtenerlo.
Nota:Todas las funciones deben definirse antes de usarse. Esto significa que la función debe colocarse al comienzo del script; solo se puede usar cuando el intérprete de shell la encuentre por primera vez. Para llamar a una función, basta con usar su nombre.
Nota: returnLa instrucción return solo puede devolver un entero entre 0 y 255, y la suma de los dos números ingresados puede exceder este rango.
Para resolver este problema, puede modificar la instrucción return y usar directamente echo para generar la suma en lugar de return:
Ejemplo
echo Esta función sumará los dos números ingresados...
echo Ingrese el primer número:
read aNum
echo Ingrese el segundo número:
read anotherNum
sum=$(($aNum + $anotherNum))
echo Los dos números son respectivamente$aNumy$anotherNum !"
echo $sum # Muestra la suma de los dos números
}
Parámetros de función
En Shell, al llamar a una función se le pueden pasar parámetros. Dentro del cuerpo de la función, se obtiene el valor del parámetro mediante $n; por ejemplo, $1 representa el primer parámetro, $2 representa el segundo parámetro...
Ejemplo de una función con parámetros:
Ejemplo
# autor: Ejemplo
# url:www.example.com
funWithParam(){
echo ¡El primer parámetro es $1!
echo ¡El segundo parámetro es $2!
echo ¡El décimo parámetro es $10!
echo El décimo parámetro es${10} !"
echo El undécimo parámetro es${11} !"
echo ¡El número total de parámetros es $#!
echo ¡Genera todos los parámetros como una cadena $*!
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
Resultado de salida:
第一个参数为 1 ! 第二个参数为 2 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
Nota: $10 no puede obtener el décimo parámetro; para obtener el décimo parámetro se necesita ${10}. Cuando n>=10, se debe usar ${n} para obtener el parámetro.
Además, hay varios caracteres especiales que se usan para manejar parámetros:
| Procesamiento de parámetros | Descripción |
|---|---|
| $# | Número de parámetros pasados al script o a la función |
| $* | Muestra todos los parámetros pasados al script como una única cadena |
| $$ | ID del proceso actual en ejecución del script |
| $! | ID del último proceso que se ejecutó en segundo plano |
| $@ | Igual que $*, pero al usarlo se agregan comillas y se devuelve cada parámetro entre comillas. |
| $- | Muestra las opciones actuales que usa Shell; su función es la misma que la del comando set. |
| $? | Muestra el estado de salida del último comando. 0 indica que no hay errores; cualquier otro valor indica que hay errores. |