Función de programación de Shell (introducción detallada)
Tabla de contenido
Uno, el papel de las funciones de shell
Escriba la secuencia de comandos juntos en un formato que facilite el uso repetido de la secuencia de comandos
En segundo lugar, el formato de la función de shell
1. Definición de la función de shell
Formato 1:
unction 函数名 {
命令序列
}
Formato 2:
函数名 (){
命令序列
}
2. Valor de retorno de la función
return significa salir de la función y devolver un valor de salida, que puede ser mostrado por la variable $? en el script
Principio de uso
- El valor de retorno se toma tan pronto como finaliza la función, porque la variable $? Solo devuelve el código de estado de salida del último comando ejecutado
- El código de estado de salida debe ser 0 ~ 255, y el valor se dividirá por 256 si excede
Ejemplo:
Tres, transferencia de parámetros de función
Ejemplo 1:
Ejemplo 2:
Cuarto, el alcance de las variables de función
Las funciones en los scripts de shell solo son válidas en el entorno de shell actual
Las variables en los scripts de shell son globales de forma predeterminada
Utilice el comando local para limitar la variable a la función
Ejemplo 1:
#!/bin/bash
abc () {
a=5
b=6
echo "c等于$c"
}
a=8
c=9
abc
echo "a等于$a"
echo "b等于$b"
Ejemplo 2:
#!/bin/bash
abc () {
local i
i=8
echo "inside $i"
}
i=9
abc
echo "outside $i"
Ejemplo 3:
#!/bin/bash
abc () {
echo "inside1 $i"
let i++
local i
i=8
echo "inside2: $i"
}
i=9
abc
echo "outside $i"
~
Cinco, recursividad
La función llama a su propia función
1. Factorial
1、[root@localhost ~]#vim 7.sh
#!/bin/bash
fact () {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[$1 - 1]
local result=$(fact $temp)
echo "$[$1*$result]"
fi
}
read -p "请输入阶乘数:" n
result=`fact $n`
echo "$result"
2、[root@localhost ~]#. 7.sh
请输入阶乘数:5
120
[root@localhost ~]#
2. Directorio recursivo
#!/bin/bash
function list_files {
for f in `ls $1`
do
if [ -d "$1/$f" ]
then
echo "$2$f"
list_files "$1/$f" "$2"
else
echo "$2$f"
fi
done
}
list_files "/var/log" ""
Seis, biblioteca de funciones
1、[root@localhost ~]#vim 9.sh
#!/bin/bash
jiafa () {
result=$[$1 + $2]
echo $result
}
jianfa () {
result=$[$1 - $2]
echo $result
}
chengfa () {
result=$[$1 * $2]
echo $result
}
chufa () {
if [ $2 -ne 0 ]
then
result=$[$1 / $2]
echo $result
else
echo "$2不能等于0!"
fi
2、[root@localhost ~]#vim 10.sh
#!/bin/bash
. ~/9.sh
read -p "输入第一个参数值:" first
read -p "输入第二个参数值:" second
result1=`jiafa $first $second`
result2=`jianfa $first $second`
result3=$(chengfa $first $second)
result4=$(chufa $first $second)
echo $result1
echo $result2
echo $result3
echo $result4
3、[root@localhost ~]#vim 10.sh
[root@localhost ~]#. 10.sh
输入第一个参数值:10
输入第二个参数值:30
40
-20
300
0