shell脚本:函数

shell编程基础:函数

标签:shell脚本

  • 函数的定义和调用

    
    #shell中的函数定义#其中function为关键字,FUNCTION_NAME为函数名
    
    function FUNCTION_NAME(){        
        command1#函数体中可以有多个语句,不允许有空语句
        command2        
        ...
    }
    
    FUNCTION_NAME   #函数调用
  • 函数的返回值

    function FUNCTIONNAME(){
        ...
        return 3                         #其余输入全部返回3
        ...
    }
    
    checkNum    #函数调用
    RTV=$?      #将函数返回值保存到一个变量中,或者是直接使用$?
  • 带参数的函数(并未写在括号之中,而是使用位置参数

    • 位置参数
      在Shell中,向函数传递参数也是使用位置参数来实现的。如下:
    [root@localhost ~]# cat checkFileExist_v2.sh
    
    #!/bin/bash 
    function checkFileExist(){
        if [ -f $1 ]; then
            return 0    
        else
            return 1
        fi
    }
    
    echo "Call function checkFileExist"
    checkFileExist $1  # 需要将$1作为参数传递给函数
    
    if [ $? -eq 0 ]; then
        echo "$1 exist"
    else
        echo "$1 not exist"
    fi
    • 指定位置参数值
        除了在脚本运行时给脚本传入位置参数外,还可以使用内置命令set命令给脚本指定位置参数的值(又叫重置)。一旦使用set设置了传入参数的值,脚本将忽略运行时传入的位置参数(实际上是被set命令重置了位置参数的值)。

      [root@localhost ~]# cat set01.sh
      
      #!/bin/bash 
      set 1 2 3 4 5 6 #设置脚本的6个位置参数,其值分别是1 2 3 4 5 6
      COUNT=1
      for i in $@
      do
          echo "Here \$$COUNT is $i"
          let "COUNT++"
      done
      
      #运行结果如下#给脚本传入参数a b c d e f,但是由于脚本运行时“重置”了位置参数的值,所以打印出来的位置参数为脚本中设置的值
      
    • 移动位置参数
        可以在shift命令后跟上向左移动的位数,比如说shift 2就是将位置参数整体向左移动两位。

      下面的例子是利用shift来计算脚本中所有参数的和。
      [root@localhost ~]# cat shift_04.sh
      
      #!/bin/bash 
      TOTAL=0
      until [ $# -eq 0 ]
      do    
          let "TOTAL=TOTAL+$1"   
          shift
      done
      echo $TOTAL
      
      
      #执行结果
      
      [root@localhost ~]# bash shift_04.sh 10 20 30
      60
  • 函数库
    在实践中建议库函数使用下划线开头。

    • 自定义函数库
        建立一个叫lib01.sh的函数库(就是写一个函数,放在一个固定的位置作为函数库使用,在其他的函数中可以加载)。
        加载函数库的方法(在shell脚本中的写法):

      
      #使用“点”命令
      
      . /PATH/TO/LIB
      
      #使用source命令
      
      source /PATH/TO/LIB

      【示例】

      [root@localhost ~]# cat callLib01.sh
      
      #!/bin/bash 
      source ./lib01.sh   #引用当前目录下的lib01.sh函数库
      _checkFileExists /etc/notExistFile      #调用函数库中的函数
      _checkFileExists /etc/passwd
    • 函数库/etc/init.d/functions简介

    [root@localhost ~]# cat callFunctions01.sh
    
    #!/bin/bash 
    source /etc/init.d/functions
    confirm ITEM
    if [[ $? -eq 0 ]]; then     
        echo "ITEM confirmed"
    else
        echo "ITEM not confirmed"
    fi
    
    
    #运行结果
    
    [root@localhost ~]# bash callFunctions01.sh
    Start service ITEM (Y)es/(N)o/(C)ontinue? [Y] Y
    ITEM confirmed

      从运行结果可以发现,脚本运行时会询问是否确认“Start service ITEM”,实际上这是functions函数库中confirm函数的功能。
      funtions函数库中的常用函数:
    shell脚本:函数_第1张图片
    shell脚本:函数_第2张图片

你可能感兴趣的:(编程,shell)