函数
函数(function),在很多情况下,我们需要多次处理重复的业务,或者复杂的业务时,可以将其单独封装成一个函数,这样既可以提高代码阅读性,也可以进行解耦,以及减少重复代码。
需要注意的是,shell脚本是由上到下,从左到右一次执行的,所以,函数一定要声明在调用之前。
函数中可以使用return
来显式地退出,后面可以接0-255范围内的整数,默认为0,代表正常退出,其余均为不正常退出。
函数的声明
[function] fnc_name(){
fnc_body
# do whatever you want here
}
函数的调用
# 直接写出函数名即可,不加括号,并且参数不是写在括号中,而是接在空格后,多个参数用空格分割
fnc_name param1 param2 param3 ... paramN
函数的内置变量
同shell script一样,函数也有很多内置变量,并且和shell script用法基本相同
变量 | 含义 |
---|---|
$# | 所传递的参数的总个数 |
$* | 以字符串的形式,显示所传递的所有参数 |
$$ | 显示当前进程的PID |
$@ | 如为加引号,则使用时与$*相同,但是使用时如果加了引号,则每个变量都会以引号的方式返回。 |
$? | 上一条命令的执行状态码,0为正常,其他为错误 |
这里写一个简单的例子,顺便演示一下$*与$@的区别
vim fnc_test.sh
#!/bin/bash
# Program:
# Program shows how to define and call a function with parameters
# and tell us the different between $* and $@
# History:
# yyyy/mm/dd Shuu First release
function fnc_a(){
echo "======> the variable '\$\*' without \"\" is like:"
for var in $*;
do
echo $var
done
echo "======> the variable '\$\@' without \"\" is like:"
for var in $@;
do
echo $var
done
}
# call the fnc_a and pass the parameters
fnc_a one two three four five six
function fnc_b(){
echo "======>