16.2 带参数的函数
16.2.1 位置参数
在16.1.2节中,checkFileExist.sh脚本中定义了checkFileExist函数,但是可以看到这个脚本实际上写死了FILE变量,这会造成想要判断不同的文件是否存在时,需要修改脚本中的FILE变量——也就是要对代码本身的内容进行修改,这也是典型的代码和数据没有分开而导致的问题。事实上,可以通过定义带参数的函数解决这个问题。在Shell中,向函数传递参数也是使用位置参数来实现的。
使用带参数的函数修改之前的checkFileExist.sh脚本为checkFileExist_v2.sh,注意后面执行脚本时的传参方式。
- [root@localhost ~]# cat checkFileExist_v2.sh
#!/bin/bash
function checkFileExist(){
if [ -f $1 ]; then
return 0
else
return 1
fi
}
echo "Call function checkFileExist"
checkFileExist $1
if [ $? -eq 0 ]; then
echo "$1 exist"
else
echo "$1 not exist"
fi
#
执行脚本时,通过直接向脚本传递文件全路径的方式传递参数
#
可以看到这种方式不会因为测试文件的不一样而修改脚本本身的内容,非常简单
[root@localhost ~]# bash checkFileExist_v2.sh etcnotExistFile
Call function checkFileExist
etcnotExistFile not exist
[root@localhost ~]# bash checkFileExist_v2.sh etcpasswd
Call function checkFileExist
etcpasswd exist
下面的例子可以接受两个参数:$1和$2,该脚本将计算出$1的$2次方的值。
- [root@localhost ~]# cat power.sh
#!/bin/bash
function power(){
RESULT=1
LOOP=0
while [[ "$LOOP" -lt $2 ]]
do
let "RESULT=RESULT*$1"
let "LOOP=LOOP+1"
done
echo $RESULT
}
echo "Call function power with parameters"
power $1 $2
#
计算2
的2
次方
[root@localhost ~]# bash power.sh 2 2
Call function power with parameters
4
#
计算3
的3
次方
[root@localhost ~]# bash power.sh 3 3
Call function power with parameters
27