函数、函数名、函数定义、变量作用域、函数返回值、参数、递归
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数:一段具有特定功能的代码
函数名:为这段代码所取的名字,可以通过函数名完成特定功能
注意:
函数名出现的地方即为 函数对应的代码替换的地方
(变量名出现的地方即为 变量所对的值替换的地方)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的作用
代码重用:过程式编程中,代码重用的重要组件.
模块化编程:
结构化编程:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的特点
1)没有执行入口,只能被有执行入口的程序调用执行
2)函数有生命周期:被调用时创建。调用结束时,终止。
3)函数的返回状态码:函数终止前最后一个命令的返回值,或由return命令给定返回值而终止
return # 0 成功 1-255 失败
4)函数的执行上下文:函数名被调用时会引入的一个新环境
5)函数的执行上下文中定义的变量(局部变量),存活同期为函数的生命周期
函数没有执行入口
函数的生命周期在调用结束后终止
函数名被调用时,即会引入一个函数上下文
函数的局部变量的作用域:函数的生命周期
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数、变量命令法则:
1、见名知义: 驼峰法则: childrenName _: children_name
2、数字、字母、_、特殊字符,不能是数字开头
3、不能是关键字: if, else, then, while等
4、区分大小写
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的语法:
格式一: function f_name { 函数的执行上下文 }
格式二: f_name() { 函数体 }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数的返回值:
执行结果:
过程调用: 没有执行结果
函数调用: 有执行结果
执行状态结果:
return #: 由return命令的返回值
最后一个命令的返回值
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数可接受参数
传递参数给函数,调用函数时,在函数后面以空白分隔给定参数列表即可,例如testfunc arg1 arg2
在函数体当中,可使用$1, $2, $3,....$*, $@, $#
接受参数,一般进行以下判断: [ $# -lt 1 ]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数中变量作用域
局部变量:local var=value ,在函数体中定义,变量存活的时间为函数的生命周期, 函数被调用时,变量被创建;函数结束时,变量被自动销毁.
本地变量:整个script中生效
本地变量:
局部变量:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
函数递归
函数直接或间接调用自已
函数
示例一:用户不存在则添加
示例二: 添加user1-user10
示例三: 添加服务脚本
示例四: 打印九九乘法表
函数的返回值
示例一: 添加user1-user10
示例二:打印NN乘法表
函数作用域
本地变量
局部变量
函数递归
示例一:阶乘运算 $[$1*$(fact $[$-1])]
示例二:求n阶斐波那契数列 $[fab $[$1-1]*$(fab [$1-2])]
函数
1、
示例一:用户不存在则添加 #!/bin/bash # function adduser { if [ $# -lt 1 ]; then return 2 # 2: no arguments fi for i in $*; do if id $i &> /dev/null; then echo "$i is exist" else useradd $i retval=$? [ $retval -eq 0 ] && echo "Add user $i finished." fi done } adduser $*
2、
示例二: 添加user1-user10 #!/bin/bash # function addusers { for i in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10; do if id $i &> /dev/null; then echo "$i is exist" else useradd $i [ $? -eq 0 ] && echo "Add $i finished." fi done } addusers
3、
示例三: 添加服务脚本 #!/bin/bash # # chkconfig: - 98 2 # description: lcc.org prog=$(basename $0) lockfile=/var/lock/subsys/$prog start() { if [ -e $lockfile ]; then echo "$prog is already running" else touch $lockfile if [ $? -ne 0 ]; then touch $lockfile && echo "start $prog finished" else echo "start $prog finished" fi fi } stop() { if [ -e $lockfile ]; then rm -rf $lockfile echo "stop $prog ok" else echo "$prog is stopped yet" fi } status() { if [ -e $lockfile ]; then echo "$prog is running..." else echo "$prog is stopped..." fi } usage() { echo "Usage: $prog {start|stop|restart|status}" return 2 } if [ $# -lt 1 ]; then usage exit 2 fi case $1 in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; *) usage ;; esac
4、
示例四: 打印九九乘法表 #!/bin/bash # function multi { for i in {1..9}; do for j in $(seq $i); do echo -e -n "${j}X${i}=$(($i*$j))\t" done echo done } multi
函数的返回值
1、
示例一: 添加user1-user10 #!/bin/bash # function f2 { if id user$i &> /dev/null; then echo "user$i is exist" return 2 else useradd user$i [ $? -eq 0 ] && echo "Add user$i finished." return 0 fi } function f1 { for i in {1..10}; do f2 echo $? done } f1
2、
示例二:打印NN乘法表 #!/bin/bash # function multi { if [ $# -lt 1 ]; then return 2 # 2: no argument fi local i=1 while [ $i -le $1 ]; do local j=1 while [ $j -le $i ]; do echo -e -n "${j}X${i}=$[$i*$j]\t" let j++ done echo let i++ done } multi $1
函数作用域
1、
本地变量 #!/bin/bash # declare -i i=6 f1() { let i++ echo "function: $i" } f1 echo "script: $i" [root@localhost bin]# bash local.sh function: 7 script: 7
2、
局部变量 #!/bin/bash # declare -i i=6 f1() { local i=9 let i++ echo "function: $i" } f1 echo "script: $i" [root@localhost bin]# bash local.sh function: 10 script: 6
函数递归
1、
示例一:阶乘运算 $[$1*$(fact $[$-1])] #!/bin/bash # fact() { if [ $1 -eq 0 -o $1 -eq 1 ]; then echo "1" else echo $[$1*$(fact $[$1-1])] fi } fact $1
2、
示例二:求n阶斐波那契数列 $[fab $[$1-1]*$(fab [$1-2])] #! /bin/bash # fab() { if [ $1 -eq 1 ]; then echo 1 elif [ $1 -eq 2 ]; then echo 1 else echo $[fab $[$1-1]*$(fab [$1-2])] } fab 2
转载于:https://blog.51cto.com/sonlich/1964474