shellNote--day11

时间:2019-02-20
本文章向大家介绍shellNote--day11,主要包括shellNote--day11使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

shellNote

day11

  • 创建函数

    function name {
    	commands
    }
    

    name属性定义了函数的唯一名称,脚本中定义的每个函数必须有一个唯一的名称;

    commands是构成函数的一条或多条shell命令,调用是会按顺序依次执行;

    另一种定义函数的格式:

    name() {
    	commands
    }
    
  • 使用函数

    在脚本中使用函数,跟使用其他shell命令一样,在行中指定函数名就行了;

    #!/bin/bash
    function func {
    	echo "this is a example"
    }
    
    echo "hello"
    
    func
    
    echo "end"
    
    • 函数的定义需要的使用之前;

    • 由于函数名唯一,所以重定义了函数,之后的调用会使用新的函数;

  • 返回值

    • 默认退出状态码

      函数的退出状态码是函数中最后一条命令返回的退出状态码,在函数结束,可以用标准变量$?来确定函数的退出状态码;

    • $?变量

      确定函数的退出状态码;

    • 使用return

      可以使用return来退出函数并返回特定的退出状态码;

      注意:

      • 函数一结束就要取返回值;

      • 退出状态码必须是0-255;

      • $?变量只是返回执行的最后一条命令的退出状态码,所以在函数执行之后,又执行了其他命令,返回值就丢失了;

    • 使用函数输出

      可以对函数的输出保存到shell变量中,这样就可以获得返回的较大的整数值或字符串值;

      result=$(function)

      #!/bin/bash
      
      function dbl {
      	read -p "enter a value" value
      	echo $[ $value * 2 ]
      }
      
      result=$(dbl)
      

      例子中,read也会有一条输出,但shell会将其忽略掉,假如使用了echo来输出"enter a value"的话,那么他也会读进result变量中

  • 向函数传递参数

    shell会把函数当做脚本来操作,所以向函数传递参数,实际上跟普通脚本传递参数一样;

    函数使用标准的参数环境变量来表示命令行上传的参数;

    例如:函数名$0,其他参数$1,$2等,也可以用特殊变量$#来判断传给函数的参数数量;

    使用函数传参,参数和函数必须在同一行:

    func $value 10

    注意:函数中的$1或$2和主体脚本的$1和$2不一样,必须在调用时传递给函数

  • 全局变量

    全局变量在shell脚本中任何地方都有效;

    默认情况下,在脚本中定义的变量都是全局变量;

    在函数外定义的变量可以在函数内访问;

  • 局部变量

    函数中使用的变量可以声明为局部变量;

    只需要在变量声明前加上local关键字即可;

    local temp

    local关键字保证了变量是在函数内有效,函数之外有同名变量,两者是分离开来的,互不影响;

  • 向函数传递数组

    不能将数组当单个参数传递,这样的话只能传递数组的第一个值;

    需要将数组的变量分解为单个的值,将这些值都作为函数参数使用;

    在函数内部,在将这些值重新组合为一个新的数组;

    #!/bin/bash
    function func {
    	local newarray
    	newarray=($(echo "$@"))
    }
    
    myarray=(1 2 3 4 5)
    
    func ${myarray[*]}
    
  • 从函数返回数组

    函数用echo语句输出单个数组的值,然后脚本再将其重新放入新的数组变量中;

    #!/bin/bash
    function func {
    	local array=(1 2 3 4 5)
    	echo ${array[*]}
    }
    
    result=($(func))
    
    echo "array is : ${result[*]}"
    
  • 创建库

    可以将常用的功能函数,创建为一个库文件;

    需要使用的时候,引用库文件即可在脚本中使用库文件中的函数;

  • 使用函数库–source

    source命令会在当前shell上下文中执行命令,并不会创建一个新的shell;

    使用source命令在shell脚本中运行库文件脚本;

    source命令快捷的别名: 点操作符;

    运行库文件myfuncs脚本:

    source ./myfuncs

    . ./myfuncs

  • 在命令行创建函数

    单行方式,需要注意每个命令后面加个分号;

    多行方式,在输入一行后,shell会输出>,然后可以继续编写函数,直到在函数结尾使用},shell会知道完成了函数的定义;

  • 在.bashrc文件定义函数

    命令行创建函数,退出shell时便会丢失;

    常用的函数或库文件,可以定义在.bashrc文件中;

  • shtool库文件

    shtool库文件提供一些简单的shell脚本函数,需要可以使用;