【Linux Shell脚本编程】函数的定义与调用

Tanglu Shell 2019-04-12 15234 0

一、如何在Shell中定义函数语法

#标准写法
function 函数名(){
命令
}

#简写
函数名(){
命令
}


二、在Shell中调用函数

定义的函数必须在脚本中引用才会生效,引用函数时只需要直接使用函数名即可,可以把函数名理解成一条命令

#定义一个函数名为name并引用,执行脚本后会输出"My name is Tom",
cat function.sh  
#!/bin/bash
name(){
echo "My name is Tom"
}

name


三、Shell函数传参

在Shell中允许使用位置变量来给函数传参,比如"sh test.sh 10 - 5",这里的10和5就是在调用函数时的$1、-为$2、5为$3

cat test.sh
#!/bin/bash
function calcu
{
  case $2 in
    +)
      echo "`expr $1 + $3`"
    ;;
    -)
      echo "`expr $1 - $3`"
    ;;
    \*)
      echo "`expr $1 \* $3`"
    ;;
    /)
      echo "`expr $1 / $3`"
    ;;
  esac
}


calcu $1 $2 $3


四、Shell函数的返回值

在函数体中可以通过return语句来退出函数并赋予一个返回值给脚本。return和exit不同之处在于exit是退出整个脚本,而return只是结束函数。如果没有为函数定义return,则以最后一条命令的运行结果($?)作为返回码,如下图

function1.png


使用return自定义返回值

#!/bin/bash
nginx_status(){
  ps aux | grep nginx | grep -v grep & > /dev/null
  if [ $? -eq 0 ];then
    return 0
  else
    return 1
}

nginx_status
echo $?


在一个脚本中定义的函数只能在该脚本中调用,不能跨脚本。如果多个脚本要调用同一个功能的函数的话难道要定义多次吗?其实不用,可以定义一个函数库文件,然后在每个脚本中引用该函数库即可。这个可以参考系统默认的一些启动脚本,都会在脚本最开始运行一次functions库文件来调用函数

functions2.png

 

五、Shell函数库的定义与使用

对于有可能会重复使用的代码可以将其封装成函数文件,然后再由其它脚本进行调用

#!/bin/bash
. /shell/my_function   #调用了一个函数文件
add 1 2         #函数文件里又定义了add的功能,所以这里就可以直接在脚本中使用


评论