# shell 函数指北

# 创建函数

shell中有两种创建函数的方法。

一:关键字function

function name {
  commands
}

如上示例,name为函数唯一名称,在shell脚本中每个函数名必须唯一,commands为构成函数的多条shell命令。

二:无关键子

name() {
  commands
}

在函数名后面直接调价括号,大括号内味函数包含的shell命令。

# 使用函数

shell中使用函数只需要调用函数名即可(注:无需在函数名后面加括号)

示例如下:

#!/bin/bash

function funName1() {
  echo "在函数中打印内容"
}

count=1
while [ $count -le 5 ] 
do
  funName1
  count=$[ $count + 1 ]
done

echo 循环结束

点此下载以上脚本

执行结果如下:

在函数中打印内容
在函数中打印内容
在函数中打印内容
在函数中打印内容
在函数中打印内容
循环结束

注意事项:

  1. 函数必须在调用之前进行定义,否则会报错xxx: command not found
  2. 函数名必须唯一,否则后定义的函数会覆盖先定义的函数,并且不会有任何提示

# 返回值

函数执行结束后都会返回一个状态码(返回码、退出码),有三种不同的方式来为函数生成状态码。

# 一:默认退出状态码

默认情况下,函数退出码就是函数中最后一条命令返回的退出码,在函数执行后可以通过$?来获取函数的退出码。

#!/bin/bash

fun1() {
  echo "显示一个不存在的文件"
  ls -l file-non-exist
}

echo 开始调用函数
fun1
echo 退出码为:$?

点此下载以上脚本

执行结果如下:

显示一个不存在的文件
开始调用函数
退出码为:1

函数退出码为1,因为函数中最后一条命令没有运行成功,默认状态码仅考虑最后一条命令的运行状态而不考虑其他代码的运行状态,故而有了其他两种状态码返回方法

shell0为运行成功的状态码,其他均为异常状态码

# 二:return 关键字

通过return退出函数是可以指定特定的状态码

#!/bin/bash

fun1() {
  if [ -f /file-non-exit ] 
  then
    return 2 # 函数返回状态吗
  fi

  echo find file /file-non-exit
}

echo 开始调用函数
fun1
echo 状态吗是: $?

点此下载以上脚本

运行结果如下:

开始调用函数
状态吗是: 2

注:函数状态吗在0~255之间,超出该范围将导致报错。

# 三:echo

正常的命令输出结果可以保存到shell变量中,对函数也可以采用同样的方案:在函数中进行echo输出,调用的地方将输出结果保存起来

#!/bin/bash

fun1() {
  read -p "请输出任意信息" input
  echo input
}

result=$(fun1)
echo return value is $result

点此下载以上脚本

通过该方案可以返回小数、字符串类型的返回值。

# 在函数中使用变量

# 参数变量

shell中调用函数同时需要传参的时候,函数和参数必须在用一行,如:fun arg1 arg2,同时函数内部可以通过$1$2等变量获取对应的参数

#!/bin/bash

fun() {
  echo '$1 is' $1
  echo '$2 is' $2
}

fun arg1 arg2

点此下载以上脚本

# 全局变量

默认情况下,在shell脚本中定义的都是全局变量,在脚本任意地方均可读取,包括函数内部。

# 局部变量

局部变量使用local来定义,这样在函数内部定义的变量就不会影响全局

# 函数库

如果相同函数在不同shell脚本中都用到了,这时候可以将通用的函数放到单独的文件中,既函数库,例如:myFuncs.sh

#!/bin/bash

functioin add {
  echo $[ $1 + $2 ]
}

function multem {
  echo $[ $1 * $2 ]
}

function divem {
  echo $[ $1 / $2 ]
}

在使用的脚本中通过source /path-to-myFunc.sh. /path-to-myFunc.sh 加载函数库,加载后即可使用addmultemdivem三个函数。

# shtool

如同其他编程语言都有各种第三方库一样,shell也有自己的第三方库,如非常流行的shtool,该函数库就提供了很多便捷的函数。

# 安装:

下载地址:shtool fpt 下载后执行以下脚本即可安装:

tar -zxvf shtool-2.0.8.tar.gz
./configure
make

安装后shtool提供的函数便可以再任意地方使用

brew 用户可以通过brew install shtool来快速安装

函数 功能描述
Arx 创建归档文件
Echo 显示字符串,提供了一些扩展功能
install 安装脚本或文件
mdate 显示文件或目录的修改时间
mkln 根据相对路径创建链接
move 移动文件,支持文件替换
Prop 显示一个带有动画的进度条
version 创建版本信息文件
最后更新: Wed, 19 Jul 2023 14:58:51 GMT

0 评论

加载中...
访问量:-