文章目录
欢迎访问个人网络日志🌹🌹知行空间🌹🌹
Linux Shell自定义函数
在脚本中一遍又一遍地编写同样的代码会很烦人,为了避免这种麻烦,可以将代码封装成函数,多次引用。
1)函数的定义与使用
Linux Shell
中函数的定义有两种方式:
- 采用关键字
function
function name {
commands
}
- 函数名后跟空括号
name() {
commands
}
使用函数:
#!/bin/bash
sayHello
function sayHello {
echo "Hello, Bash Shell."
}
sayHi() {
echo "Hi, Bash Shell."
}
sayHello
sayHi
sayHi() {
echo "Hi2, Bash Shell."
}
sayHi
执行,
$ ./test.sh
# ./test.sh: 行 3: sayHello:未找到命令
# Hello, Bash Shell.
# Hi, Bash Shell.
# Hi2, Bash Shell.
每次引用函数名时,bash shell
会找到函数的定义并执行在那里定义的命令。
从上面的例子可以看到,
- 使用未定义的函数脚本会报错
- 函数可以被重定义,调用时会使用最新的定义,原来的定义会被覆盖
2)函数的返回值
通常,在使用函数时为了与调用者交互,会希望函数能给出局部逻辑执行后的返回值,如运算结果,执行有没有出错。
默认情况
在bash shell
中,默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码。函数执行结束后,可以用标准变量 $?
来确定函数的退出状态码。
#!/bin/bash
function sayHello {
echo "Hello, Bash Shell."
}
sayHello
echo ret value: $?
sayHi() {
echo "Hi2, Bash Shell."
ls -al rob
}
sayHi
echo ret value: $?
sayHi() {
ls -al rob
echo "Hi2, Bash Shell."
}
执行,
$ ./test.sh
# Hello, Bash Shell.
# ret value: 0
# Hi2, Bash Shell.
# ls: 无法访问 'rob': 没有那个文件或目录
# ret value: 2
# ls: 无法访问 'rob': 没有那个文件或目录
# Hi2, Bash Shell.
# ret value: 0
可以看到,在sayHi
函数中执行最后一行指令ls -al rob
时出错,因此$?
的值是2
。但是,看上面的例子中,前后两个sayHi
函数因为出错语句位置的不同,函数的退出状态也不同。因此,使用$?
判断函数的状态是很不可靠的。
使用return
命令
bash shell
使用 return
命令来退出函数并返回特定的退出状态码。 return
命令允许指定一个整数值来定义函数的退出状态码。
return
返回的状态码也在$?
中,必须函数一结束就返回,否则返回值会结束- 退出状态码必须是
0-255
,任何大于256的值都会产生一个错误值。
#!/bin/bash
doubleCount(){
read