shell 函数、awk函数、以及awk调用shell中的函数,下面统一总结一下。昨晚写脚本函数,然后就把函数在shell中的各种使用方法都实验了一篇,下面直接贴代码吧。
1、 普通shell函数:
#!/bin/sh
function fun_test4()
{
_message=$1
if [ "$_message" -ge "0" ];then
return 0
elif [ "$_message" -lt "0" ];then
return 1
fi
}
if fun_test4 -10
then
echo "shell call the function : 10 greater than 0 "
else
echo "shell call the function : less than 0"
fi
几点说明:
1.1、向函数传递参数:
向函数传递参数就像在一般脚本中使用特殊变量$ 1 , $ 2 . . . $ 9一样,函数取得所传参数后,将原始参数传回s h e l l脚本,因此最好先在函数内重新设置变量保存所传的参数。这样如果函数有一点错误,就可以通过已经本地化的变量名迅速加以跟踪。函数里调用参数(变量)的转换以下划线开始,后加变量名,如: _ F I L E N A M E或_ f i l e n a m e。
1.2、 返回值:
函数中可以用return命令返回,如果return后面跟一个数字则表示函数的Exit Status;返回0表示真返回1表示假。
1.3、获取函数返回值--再贴一个例子:
#!/bin/sh
function fun_test3()
{
if [ $# -eq 1 ];then
_message="$1"
else
echo "Parameter error:"
exit
fi
if [ "$_message" -ge "0" ];then
returnVal="ok"
elif [ "$_message" -le "0" ];then
returnVal="no"
else
returnVal="0"
fi
echo $returnVal
}
value1=`fun_test3 1`
value2=`fun_test3 -2`
value3=`fun_test3 0`
echo "shell call the function : " $value1
echo "shell call the function : " $value2
echo "shell call the function : " $value3
2、 Awk函数:
2.1、无参数函数:
#!/bin/sh
awk '
#注意函数括号里面需要打两个空格
function fun_test1( )
{
print "hello world! "
}
BEGIN{
FS="|"
}
{
printf "in awk no Parameter:" $2 " "
#注意调用函数值得带()括号
fun_test1()
}' sourcedata/pcscard.dat
2.2、带参数函数:
#!/bin/sh
awk '
function fun_test2(message)
{
if(message>0){
returnVal="ok"
}
else if(message<0){
returnVal="no"
}
else{
returnVal="0"
}
return returnVal
}
BEGIN{
FS="|"
#注意这里函数的参数是放在括号内的,和shell中的函数就不同了。
print "in awk have Parameter:" fun_test2(1)
print "in awk have Parameter:" fun_test2(-2)
print "in awk have Parameter:" fun_test2(q)
}
{}' sourcedata/pcscard.dat
3、 Awk中调用shell中的函数:
#!/bin/sh
function fun_test4()
{
_message=$1
if [ "$_message" -ge "0" ];then
return 0
elif [ "$_message" -lt "0" ];then
return 1
fi
}
export -f fun_test4
awk '
BEGIN{
FS="|"
printf "awk call shell function: "
_value=system("fun_test4 10")
print _value
if(_value == "0")
{
print "shell call the function : 10 greater than 0"
}
else
{
print "shell call the function : less than 0"
}
}
{}' sourcedata/pcscard.dat
exit
注意:awk中如果需要调用shell函数需要将函数export为系统参数,然后调用的时候用system;个人感觉还是直接用awk自己定义函数方便。