Shell编程之函数day3

1.函数的作用:

函数的作用就是把程序里多次调用相同代码部分定义成一份,然后为这一份代码起个名字,其它所有的重复调用这部分代码就都只用这个函数名即可。当需要修改这部分重复代码时,只需要改变函数体内的一份代码即可实现所以有调用修改。

使用函数的优势:

  ① 把相同的程序段定义成函数,可以减少整个程序的代码量

  ② 增加程序的可读性

  ③ 可以实现程序功能模块化,不同的程序使用函数模块化

  ④ 可以让程序结构更清晰

  ⑤ 相同的代码模块可重复调用

强调:对于shell来说,linux系统的2000个命令都可以说是shell的函数。

2.shell函数语法:

语法格式:

简单语法格式:

函数名(){

  指令...

  return n

}

规范语法格式:

function 函数名(){

  指令...

  return n

}

提示:shell的返回值是exit输出返回值,函数里用return输出返回值。

3.shell函数的执行

调用函数:

   ①直接执行函数名即可(不带括号)

   函数名

   注意:

      a.执行函数时,函数名后不要带小括号

      b.函数定义函数体必须在要执行的函数名的前面定义,shell的执行从上到下按行执行的。

  ②带参数的函数执行方法:

  函数名  参数1  参数2

  提示:函数的传参和脚本的传参类似,只是脚本名换成函数名即可

  【函数后接的参数说明】

   a.shell的位置参数($1、$2、$3、$4、$5、$#、$*、$?以及$@)都可以是函数的参数。

   注:Linux shell脚本中一些参数的含义

     $# 是传给脚本的参数个数

     $0 是脚本本身的名字
     $1 是传递给该shell脚本的第一个参数
     $2 是传递给该shell脚本的第二个参数
     $@ 是传给脚本的所有参数的列表
     $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
     $$ 是脚本运行的当前进程ID号
     $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

   b.此时父脚本的参数临时地被函数参数所掩盖或隐藏

   c.$0比较特殊,它仍然是父脚本的名称

   d.当函数完成时,原来的命令行脚本参数即恢复

   e.在shell函数里面,return命令功能与shell里的exit类似,作用是跳出函数

   f.在shell函数体里面使用exit会退出整个shell脚本,而不是退出shell函数

   g.return语句会返回一个退出值(返回值)给调用函数的程序

   h.函数的参数变量是在函数体里面定义,如果是普通变量一般会使用local i定义

4.函数范例:

定义一个函数脚本:

#!/bin/sh
fun01test(){
    echo "I am a function!!"
}

fun01test                   ==>调用函数fun01test

在上述函数脚本中引用另一个脚本里的函数:

[root@localhost ~]# cat fun01.sh
#!/bin/sh
. /root/fun02test.sh                  ==>引入另一个函数所在的脚本文件
fun01test(){
    echo "I am a function!!"
}
fun01test
fun02           ==>执行所需调用的函数名称

定义一个传参函数并执行:

[root@localhost ~]# cat fun02test.sh
#!/bin/sh
fun02(){
    echo "This is first parameters: $1"
}
fun02 111
fun02 aaa
fun02 b1a1
[root@localhost ~]# sh fun02test.sh
This is first parameters: 111
This is first parameters: aaa
This is first parameters: b1a1
注意:给函数传递参数时,不是执行脚本文件后面跟传递的参数,是在调用函数时传递

实例1:

  函数传参转出脚本命令行传参,对任意指定URL判断是否异常。

分步解答:

1.脚本传参检查web url是否正常。

2.检查的功能写成函数。

3.函数传参转成脚本命令行传参,对任意指定URL判断是否异常。

方法一:

#!/bin/sh
[ -f /etc/init.d/functions ]&& . /etc/init.d/functions
usage(){
    echo "USAGE:$0 url"
    exit 1
}
RETVAL=0
CheckUrl(){
    wget -T 10 --spider -t 2 $1 &>/dev/null
    RETVAL=$?
    if [ $RETVAL -eq 0 ];then
       action "$1 url" /bin/true
        
    else
       action "$1 url" /bin/false
    fi
    return $RETVAL
}
main(){
    if [ $# -ne 1 ];then
        usage
    fi
    CheckUrl $1
    RETVAL=$?
    return $RETVAL
}
main $*

猜你喜欢

转载自www.cnblogs.com/Simplelearning/p/12384467.html
今日推荐