Linux命令行与shell脚本编程大全.第3版 第17章
程序员文章站
2022-05-29 22:04:16
...
第17章 创建函数
17.1 基本的脚本函数
17.1.1 创建函数
创建函数的两种方式:
第一种:
function name {
commands
}
第二种:
name() {
commands
}
17.1.2 使用函数
例子:
[[email protected] fun]# vim fun1.sh
#! /bin/bash
#using a function in a script
function func1 {
echo "This is an example of function"
}
count=1
while [ $count -le 5 ]
do
func1
count=$[ $count + 1]
done
echo "This is the end of loop"
func1
echo "Now this is the end of the script"
执行结果:
[[email protected] fun]# ./fun1.sh
This is an example of function
This is an example of function
This is an example of function
This is an example of function
This is an example of function
This is the end of loop
This is an example of function
Now this is the end of the script
[[email protected] fun]#
在函数未被使用前调用函数,会产生错误
例子:
[[email protected] fun]# vim fun2.sh
1 #! /bin/bash
2 #Using a function located in the middle of a script
3 count=1
4 echo "This line comes before the function definition"
5
6 function func1 {
7 echo "This is an example of a function "
8 }
9
10 while [ $count -le 5 ]
11 do
12 func1
13 count=$[ $count + 1 ]
14 done
15 func2
16 echo "Now this is then end of the script"
17
18 function func2 { 注意 func2和花括号之间一定要有空格,否则会报错
19 echo "THis is an example of a function func2"
20 }
执行结果:
[[email protected] fun]# ./fun2.sh
This line comes before the function definition
This is an example of a function
This is an example of a function
This is an example of a function
This is an example of a function
This is an example of a function
./fun2.sh:行15: func2: 未找到命令
Now this is then end of the script
[[email protected] fun]#
注意:行数名必须是唯一的,如果你重新定义了同名的函数,新定义的函数会覆盖原来的函数的定义:
17.2 返回值
函数运行结束时,会返回一个退出状态码
17.2.1 默认退出状态
默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码,在函数执行结束时,可以用标准变量$?来确定函数的退出状态码
例子:
[[email protected] fun]# vim fun3.sh
#! /bin/bash
func1() {
echo "trying to display a non-existent file "
ls -l badfile
}
echo "testing the funciton:"
func1
echo "The exit status is : $?"
执行结果:
[[email protected] fun]# ./fun3.sh
testing the funciton:
trying to display a non-existent file
ls: 无法访问badfile: 没有那个文件或目录
The exit status is : 2
[[email protected] fun]#
修正:
[[email protected] fun]# touch badfile
[[email protected] fun]# ./fun3.sh
testing the funciton:
trying to display a non-existent file
-rw-r--r--. 1 root root 0 3月 27 10:58 badfile
The exit status is : 0
[[email protected] fun]#
但是$?只能得知最后一条命令是否运行成功,如果想要知道脚本中国其他命令shi是否运行成功,可以有以下几种办法
17.2 使用return 命令
例子:
[[email protected] fun]# vim fun4.sh
return $[ $value * 2 ]
#! /bin/bash
function func1 {
read -p "Enter a value: " value
echo "doubling the value"
return $[ $value * 2 ]
}
func1
echo "The new value is $?"
执行结果:
[[email protected] fun]# chmod u+x fun4.sh
[[email protected] fun]# ./fun4.sh
Enter a value: 5
doubling the value
The new value is 10
[[email protected] fun]#
使用return的注意事项:
记住,函数一结束就取返回值;
记住,退出状态码必须是0~255。
推荐阅读
-
《Linux命令行与shell脚本编程大全》 第十五章 学习笔记
-
Linux命令行与shell脚本编程大全笔记(正则表达式)
-
《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
-
Linux命令行与shell脚本编程大全.第3版 第17章
-
《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第十六章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第四章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第五章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第六章 学习笔记
-
《Linux命令行与shell脚本编程大全》 第十一章