Generate...|

园龄:粉丝:关注:

2022-10-27 11:49阅读: 33评论: 0推荐: 0

Linux Shell 函数

Shell函数

#!/bin/bash

定义

在被使用之前,函数必须已经被定义

如果函数名重复,后一个函数会覆盖前一个函数

function foo {
echo "foo"
}
# 也可以不写function关键字
bar {
echo "bar"
}

参数

运行函数就如同运行一个脚本,它也具有参数和返回值,和在Shell命令行中调用命令是类似的

同样使用$1, $#, $@等变量获取参数

function mul {
# 连乘参数
local result="$1" # 局部变量
shift
while [ -n "$1" ]; do
((result *= "$1"))
shift
done
echo "$result"
}
function recursive_mul {
# 递归连乘
if [ $# -eq 1 ]; then
echo "$1"
else
local result="$1"
shift
((result *= $(recursive_mul "$@")))
echo "$result"
fi
}
function bar {
# 获取最后一个参数
if [ $# -gt 0 ]; then
echo "test result ${!#}"
fi
}

变量

一般的变量就不多说了

数组

可惜的是,在Shell中不能直接传递数组,也不能直接返回数组

function double {
local arr
arr=($@) # 获取
for ((i = $(($# - 1)); i >= 0; --i)); do
((arr[i] *= 2))
done
echo "${arr[*]}" # 返回
}
var=(1 2 3 4)
arr=($(double ${var[*]}))
echo ${arr[*]}
局部变量和全局变量

全局变量有着种种不便之处(诸如使用了无效的全局变量、意料之外的赋值等),不仅Shell,其他语言中也推荐尽量使用局部变量

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

在函数中定义变量时可以使用local关键字定义局部变量

返回值

获取函数返回值的方式有两种

  1. 使用return$?
  2. 使用echo$()(当然也可以用``,但不推荐)。

二者并不对立,可以配合使用。严格意义上说,第二种方法不是返回值,而是捕获输出。

return
function foo {
echo 'test result'
return 1
}

如果没有指定return一个值,那么就返回函数中最后一个命令的返回值(函数体不能为空,别想没有命令会怎么样了)。

与C语言等不同,return的值不能直接获取,而是通过$?查看。跟其他命令一样,返回值同样应该是一个0~255的状态码。

因为if, while, until等命令是通过$?来判断的,因此返回值可以直接用于这些流程中。但记住,如果不使用这些但又想获取返回值,请在函数结束后立刻查看$?,否则它会被其他命令的返回值覆盖。

if foo; then
echo "yes"
else
echo "no"
fi
echo

return返回的状态码相比,不如说echo$()更像C语言中的返回值,可以返回字符串、整数、浮点数等,因为它是通过捕获echo的输出并保持到一个变量中来实现的。

result=$(foo)
# now result is "test result"

在其他地方使用函数

加载脚本文件到环境,可以使用source命令,可以在命令行中使用,也可以在其他脚本文件中使用

source <script file>
# 就可以使用<script file>中的命令了

每次Shell启动时都会加载~/.bashrc,可以在里面定义函数或是用source加载脚本

本文作者:violeshnv

本文链接:https://www.cnblogs.com/violeshnv/p/16831714.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Violeshnv  阅读(33)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 とおいよびごえ 凋叶棕
  2. 2 かぜのねいろ 凋叶棕
  3. 3 Milky Way Train 流派未階堂
  4. 4 nostalgia 流派未階堂
  5. 5 桜花繚乱 はちみつれもん
  6. 6 胡蝶之夢 はちみつれもん
  7. 7 色は散りゆく はちみつれもん
  8. 8 暮色蒼然 はちみつれもん
  9. 9 追想、桜ノ國 はちみつれもん
  10. 10 意にそぐわぬリターニー 凋叶棕
Milky Way Train - 流派未階堂
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.