função
1.O que é uma função
Ao escrever scripts, alguns scripts podem ser usados repetidamente e podem ser resolvidos chamando funções
Blocos de instruções definidos como funções são aproximadamente iguais a aliases
Como usar a função:
- definir função
- Referenciar novamente a função
formato básico
função nome da função {
Sequência de comandos
}
Nome da função(){
sequência de comando
}
função nome_função () {
…Corpo da função…
}
Precauções
- Escreva diretamente o nome da função ao chamar a função.
- A última função com o mesmo nome entra em vigor.
- A chamada de uma função deve ser definida primeiro
- A ordem em que outras funções são chamadas não importa, desde que sejam definidas primeiro.
func_name (){
...函数体...
}
[root@yyds opt]#func1 (){ hostname;date;}
[root@yyds opt]#func1
yyds
2023年 08月 15日 星期二 18:19:33 CST
[root@yyds opt]#vim func.sh
h () {
echo "hello"
}
nihao () {
echo `h` `w`
}
w () {
echo "world"
}
nihao
[root@yyds opt]#bash func.sh
hello world
//同名函数会进行覆盖
2. Ver funções
[root@yyds opt]#declare -F
declare -f __HOSTNAME
declare -f __SIZE
declare -f __SLAVEURL
declare -f __VOLNAME
declare -f __expand_tilde_by_ref
declare -f __get_cword_at_cursor_by_ref
declare -f __git_aliased_command
declare -f __git_aliases
..............
//函数列表,可以declare -f __HOSTNAME查看内容
3. Função excluir
cancelar func_name
[root@yyds opt]#unset h w nihao
4. Valor de retorno da função
return significa sair da função e retornar um valor de saída. A variável $? pode ser usada para representar esse valor no script.
Princípios de uso:
O valor de retorno é retornado assim que a função termina. A variável $? retorna apenas o código de retorno de saída do último comando executado.
O código de saída deve ser 0-255 e qualquer valor excedente será dividido por 256.
test1 () {
read -p "请输入一个数字:" num
return $[$num*2]
}
test1
echo $?
[root@yyds opt]#bash return.sh
请输入一个数字:34
68
5. Passando parâmetros de funções
Escopo das variáveis de função:
Funções em scripts shell são válidas apenas no ambiente shell atual
Variáveis de funções em scripts shell são globalmente válidas por padrão
Limite variáveis dentro de uma função usando o comando local
#!/bin/bash
sum1 (){
echo $1
echo $2
}
sum1 $2 $1
[root@yyds opt]#bash chuan.sh 2 5
5
2
//sum1 后面的$2对应这sum1函数里面的$1
[root@localhost opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
[root@localhost opt]# chmod +x demo8.sh
[root@localhost opt]# ./demo8.sh
8
[root@localhost opt]# vim demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
echo $i
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
i=9
myfun
echo $i
[root@localhost opt]# ./demo8.sh
8
8
[root@localhost opt]# cat demo8.sh
#!/bin/bash
myfun(){
i=8
echo $i
}
myfun
i=9
echo $i
[root@localhost opt]# ./demo8.sh
8
9
[root@localhost ~]#name=666
[root@localhost ~]#func1 () { name=99 ; echo $name; }
[root@localhost ~]#func1
99
[root@localhost ~]#echo $name
99
[root@localhost ~]#name=666;func1 () { local name=99 ;echo $name; };echo $name
#加上local变量即可将变量限制在函数内
666
6. Arquivo de função
Crie um arquivo para armazenar funções
可以建立一个文件用来存储函数,下次要使用函数时可以
. 文件名
函数名
进行使用
7. Recursão de função
Uma função chama sua própria função
阶乘
使用for循环
#!/bin/bash
sum=1
read -p "请输入一个数:" num
for i in `seq $num`
do
let sum=$[i*sum]
done
echo $sum
函数调用自己
#!/bin/bash
#
fact() {
if [ $1 -eq 0 -o $1 -eq 1 ]
then
echo 1
else
echo $[$1*$(fact $[$1-1])]
fi
}
fact $1
阶乘
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