函数分为系统函数和自定义函数
自定义函数
格式:
[ function ] functionName () { 命令 [return 返回值] }
函数内常量(和shell脚本介绍几本类似)
特殊变量 |
说明 |
${n} |
n数字,获取参数,1-9可省略大括号,0获取当前脚本文件名称 |
$# |
参数个数 |
$* |
返回所有参数,使用双引号后将参数作为一个空格分隔的字符串 |
$@ |
返回所有参数 |
$$ |
当前脚本Shell进程号 |
$! |
后台运行的最后一个进程ID号 |
$? |
最后执行命令的返回结果 |
调用时直接使用函数名和参数即可不需要写括号:
functionName param1 param2 ...
返回值处理
一般函数的放回值都是0,表示执行成功,所以返回值尽量不要有其他意义。
可以在外部声明一个全局变量,在函数内部改变达到效果。
举例:
无返回值
#!/bin/bash function a_fun () { echo '$0='$0 echo "参数个数:"$# i=0 for var in ${@} do let i++; echo 第$i个参数:$var done echo 当前shell进程ID $$ } a_fun a sd ff 12 3a :<<! 参数: 1. 输出类型 I 提示信息 S成功信息 E错误信息 W 警告信息 2. 参数内容 ! function info_fun () { if [ $1 = "I" -o $1 = "i" ] then echoType="[\e[1;34mInfo\e[0m]" elif [ $1 = "S" -o $1 = "s" ] then echoType="[\e[1;32mSuccess\e[0m]" elif [ $1 = "E" -o $1 = "e" ] then echoType="[\e[1;31mError\e[0m]" elif [ $1 = "W" -o $1 = "w" ] then echoType="[\e[1;31mWarning\e[0m]" else echoType="[\e[1;31m"'???????'"\e[0m]" fi echo -e $echoType[`date "+%Y-%m-%d %H:%M:%S"`]$2; } info_fun I 提示信息 info_fun S 成功提示 info_fun E 错误信息 info_fun W 警告信息
有返回值,其实这属于现实声明返回值,系统设置默认返回0。(不推荐这样使用)
#!/bin/bash function sum_fun () { x=$(($1+$2)) echo '$x='$x return $x } sum_fun 1 5 echo $?
其中 $? 即使调用方法的返回值。