这是暑假回来看linux命令行与shell脚本编程大全的一些笔记,并不是全部的,只是结合本人觉得需要的一些记录,在整理发表博文时也当作一种回顾!欢迎交流指正!!
16.1 .1 创建函数
格式一:
function name {
commands
}
格式二:
name() {
commands
}
16.1.2使用函数,要在脚本中使用函数,在行上指定函数名就行,跟使用其他shell命令一样
*函数要先定义,后使用,如果试图在函数被定义之前使用它,会产生错误消息。
16.2.1 默认退出状态码:函数的退出状态码是函数中最后一条命令返回的退出状态码
16.2.2 使用return命令
bash shell 使用return命令来退出函数并返回特定的退出状态码。
16.2.3 使用函数输出,可以将函数的输出保存到shell变量中。
result=`func1` ,通过这方法可以返回浮点值或字符串值
16.3.1 向函数传递参数:在脚本中指定函数时,要在调用函数的行上将参数和函数放在同一行. 如:func1 $value 10 然后函数可以用参数环境变量来获得参数值。
注意:脚本主体中的位置参数$1之类的和函数中的位置参数是不一样的。要在函数中使用脚本主体中的位置参数,必须在调用函数时手动将它们传过去。
16.3.2 在函数中处理变量
1. 全局变量
*在脚本主体中定义的任何变量都是全局变量,在函数外定义的变量可以在函数内使用,且变量在函数内被赋新值,新值在函数外也有效。
*局部变量,在函数内部声明局部变量可以在变量声明前加上local关键字local var 或者在给变量赋值时在赋值语句前加local关键字 local var=100
16.4.1 向函数传递数组参数
*不能将数组变量名当成一个函数参数,必须将该数组变量的值分解成单个值然后将这些值作为函数参数使用,然后在函数内部将所有的参数重组到新的数组变量中
function func1 {
local newarray
newarray=(`echo "$@"`)
echo "The new array value is: ${newarray[*]}"
}
myarray=(1 2 3 4 5)
func1 ${myarray[*]}
16.4.2同理,从函数中返回数组也是这样。函数用echo语句来按正确顺序输出单个数组值,然后脚本再将它们重新放进一个新的数组变量中
16.5 函数递归(以下是介乘的代码)
function factorial {
if [ $1 -eq 1 ]
then
echo 1
else
local temp=$[ $1 - 1 ]
local result=`factorial $temp`
echo $[ $result * $1 ]
fi
}
16.6 创建库
*创建一个包含脚本中所需函数的共用库文件。
*在要使用这些函数的脚本文件中包含库文件。
注意:使用函数库的关键是用source命令。此命令会在当前shell中执行命令,而不是创建一个新的shell来执行命令,否则脚本无法使用库中的函数(因为两者在不用的shell)
source称作点操作符,要在shell脚本中运行myfuncs库文件,可以这样子:. ./myfuncs ###第一个点是source,第二个点是当前目录,别混淆了
16.7.1 在命令行上创建函数(在函数尾部使用花括号,shell就知道完成了函数定义了)
*当在命令行上定义函数时,每个命令后面加个分号。
*如果是多行来定义函数,则不用在每条命令末尾加分号,只要按下回车键就行了。
16.7.2 在.bashrc文件中定义函数
1.直接把函数代码写进.bashrc文件
2.在.bashrc文件中用source命令来将已有库文件的函数添加到.bashrc脚本中