zoukankan      html  css  js  c++  java
  • 1.12函数和参数

    我们可以创建执行特定任务的函数,也可以创建能够接受参数的函数

    1)定义函数

    function fname()

    {

      statements;               

    或者

    fname()

    {

      statements;

    }

    2)只需要使用函数名就可以调用某个函数

    $ fname; #意思是执行函数

    3)参数可以传递给函数,并由脚本进行访问:

    $ fname arg1 arg2 ;#传递参数

    eg:在函数fname中,包含了各种访问函数参数的方法

    fname()

    {

      echo $1,$2;#访问参数1和参数2

      echo "$@";#以列表的方式一次性打印所有参数

      echo "$*";#类似于$@,但是参数被作为单个实体

      return 0;#返回值

    类似的,参数可以传递给脚本并通过script:$0(脚本名)访问。??????

    $1和$2分别是第一个和第二个参数,以此类推。

    "$@"被扩展成“$1” "$2" "$3"等

    “$*”被扩展成“$1c$2c$3c”,其中c是IFS的第一个字符。

    "$@"要比“$*”用的多。由于“$*”将所有的参数当做单个字符串,因此它很少被使用。

    注意函数在脚本中定义之后,还需要调用,如果该函数需要参数,则还需要在函数名后面加上参数!!!!

    补充内容:

    1、递归函数

    在bash中,函数同样支持递归(可以调用自身的函数),如

    F()

    {

      echo $1;

      F hello;

      sleep1;

    }

    Fork炸弹

    :() {:|:&};:

    这个递归函数能够调用自身,不断地生成新的进程,最终造成拒绝服务攻击。函数调用前的&将子进程放入后台。这段危险的代码会分支出2大量的进程,因而称为Fork炸弹。理解上面可参考http://en.wikipedia.org/wikiFork_bomb。

    可以通过修改配置文件/etc/security/limits.conf来限制可生成的最大进程数来避开这枚炸弹。

    2、导出函数

    函数也能像环境变量一样用export导出,如此一来,函数的作用域就可以扩展到子进程中,如

    export -f fname

    3、读取命令返回值(状态)

    通过下面的方式获取命令和返回值

    cmd;

    echo $?;

    $?会给出命令cmd的返回值。

    返回值被称为退出状态。它可用于分析命令执行成功与否。如

    #!/bin/bash

    CMD="command"#command指代你要检测退出状态的目标命令

    $CMD

    if [ $? -eq 0]

    then 

         echo "$CMD executed successfully"

    else

       echo "$CMD executed unsuccessfully"

    fi

    4、向命令传递参数

    命令的参数能够以不同的格式进行传递。假设-p、-v是可选项,-k、-N是另一个可以接受数字的选项,同时该命令还接受一个文件名作为参数,那么,它有如下几种执行方式:

    $command -p -v -k 1 file

    $command -pv -k 1 file

    $command -pvk 1 file

    $command file -pvk 1

  • 相关阅读:
    人见人爱a+b,算出两个时间的和
    远程推送原理
    iOS中的定时器
    四大对象
    核心动画类关系图
    无沙盒缓存原理
    应用程序的生命周期
    同样明文同样算法得到不同密码原理
    线程状态
    iOS中的几个重要方法
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6096791.html
Copyright © 2011-2022 走看看