shell脚本语言也是可以自定义函数的, shell里面的函数定义形式和js有点类似(参数除外), 他的定义方式如下:
shell自定义函数语法:
function xxxFn(){
# shell脚本内容
}这里也可以省略function,直接写成
xxxFn(){
# shell脚本内容
}
shell自定义函数使用, 参数传递和接收
shell中的函数中的参数传递和接收 和使用一个独立的shell脚本是一样的.
自定义函数使用:
直接在要使用的地方 写上自定义的函数名即可, 这个和使用linux里面的命令是一样的. 如: xxxFn
自定义函数参数传递:
参数传递和使用独立shell脚本和命令行工具的参数传递是一样的. 直接在函数名后面以空格隔开后传递即可, 注意参数最好用双引号引起来
如: xxxFn "var1" "var2"
自定义函数 参数接收
自定义函数的参数接收与shell脚本中接收参数时一样的, 使用 $1 接收第一个参数, $2接收第二个参数 ... $n 接收第n个参数. 使用 "$@" 来接收所有的参数, $0是当前脚本的名称
xxxFn(){
# 定义本地变量
local v1 = $1
local v2 = $2
echo "你给的第一个参数是 ${v1} , 第二个参数是: ${v2}"
}
# 自定义函数使用
xxxFn "123" "456"
上面的示例输出结果为: 你给的第一个参数是 123 , 第二个参数是: 456
自定义curl函数示例
通过自定义scurl函数 对系统中的 curl函数进行再次封装,让他默认加上我们自定义的参数
# scurl invokes `curl` with secure defaults
scurl() {
# 这里使用 "$@" 来获取用户传递的所有参数
curl --proto "=https" --tlsv1.2 --fail --show-error "$@"
}
# 使用自定义scurl函数 获取github项目的最新版本url
scurl -Ls -o /dev/null -w %{url_effective} https://github.com/tekintian/strutils/releases/latest
# 上面的命令会输出
# https://github.com/tekintian/strutils/releases/tag/v1.1.0
# 我们配合管道 直接获取最新发行的版本号 并赋值给shell变量
LATEST_VER = $(scurl -Ls -o /dev/null -w %{url_effective} https://github.com/tekintian/strutils/releases/latest | grep -oE '[^/]+$')
# wget的方式
wget https://github.com/tekintian/strutils/releases/latest --server-response -O /dev/null 2>&1 | awk '/^\s*Location: /{VER_URL=$2} END{ print VER_URL}' | grep -oE "[^/]+$"