Shell函数
linux shell可以用户自定义函数,然后在shel脚本中调用
函数定义格式:
1 (function) funname[()] 2 { 3 action; 4 (return int) 5 }
note:
1.函数定义可以function funname()定义,也可以funname()直接定义,
不带任何参数。
2.参数返回,可以显示加return,如果不加,将以最后一条命令运行结果
作为返回值,return后跟数值n(0-255)
1 #!bin/bash 2 emfun() { 3 echo "my function!" 4 } 5 emfun
函数的返回值通过$?获得。
note:所有函数在使用前必须定义。这意味着必须将函数放在调用之前定义;
调用仅通过函数名即可。
函数参数的传递跟shell执行脚本时的参数传递一致。
Shell参数传递
我们可以在执行Shell脚本时,向脚本传递参数,脚本内
获取参数的格式为:$n.n代表一个数字,1为执行脚本的
第一个参数,2个第二个......
- $0 文件名
- $# 传递的参数个数
- $* 以一个单字符串显示所有向脚本传递参数 如"$*" == $1 $2 ... $n的形式输出所有参数
- $$ 脚本运行的当前进程ID号
- $! 后台运行的最后一个进程的ID号
- $@ 与$*相同,如"$@"用""括起来的情况,以"$1" "$2" "$3"..."$n"的形式输出所有参数。
- $- 显示Shell当前选项,与set命令功能相同
- $? 显示最后命令的退出状态,0表示没有错误,其他人和我值表明错误
$* 和 $@ 区别
相同点:都是引用所有的参数
不同点: 只有在双引号中体现出来。假设在脚本运行时写三个参数1 2 3,
则"*" 等于"1 2 3"(传递了一个参数),而"@"等价于"1" "2" "3"
1 #!/bin/bash 2 3 echo "-- \$* 演示 ---" 4 for i in "$*"; do 5 echo $i 6 done 7 8 echo "-- \$@ 演示 ---" 9 for i in "$@"; do 10 echo $i 11 done