shell编程,在脚本中使用函数,局部变量,传参,返回值,递归,引入库source,shtool函数库安装使用
定义函数的两种方式:
方式一:
function fun_name { #注意括号和名称之间的空格
command
}
方式二:
fun_name () {
command
}
注意:使用函数必须在定义之后,否者会报错,重名的函数会被后者覆盖但不报错。
使用函数时直接写出名称就可以:例:fun_name
函数的返回值:
默认可以用 $? 获取函数中最后一条命令的状态码
也可以用return命令返回状态码
function fun_name {
return 0
}
注意:这个返回状态码必须是0-255
使用函数输出:
function fun_name {
read -p "Enter a value" value
echo $[ $value * 2 ]
}
reault=$(fun_name) #可以用这种方法获取函数的输出
注意:使用read命令的-p提示文字这段并不会输出在result中,只有用echo命令时才会在result中获取到输出
在函数中使用变量:
在函数中使用参数,可以将函数看做一个小型的脚本,$0代表函数名,$1,$是函数的参数。
function fun_name {
echo $[ $1 * $2 ]
}
给函数传参并获取值:value=$(fun_name10 20)
要想在脚本中给函数传参就得手动传入,例:value=$( fun_name $1 $2 )
全局变量:
默认情况下在脚本中定义的变量都是全局变量,在函数中可以使用,并会影响到全局的值。
function fun_name {
value=$[ $value + 6 ]
}
value=5
fun_name
echo $value #此时的值为11
局部变量:
只要在函数中使用的变量名前加上local关键字就可以定义局部变量
function fun_name {
local temp=$[ $value + 5 ]
}
在这个例子中value任然是全局变量,temp则为局部变量
传递数组参数:
函数会将数组每个元素当成单独的参数,所以在函数中必须重建数组。
function fun_name {
local array
array=($(echo "$@")) #重建数组
echo "${array[*]}"
}
var=(1 2 3 4 5)
fun_name ${var[*]}
从函数返回数组:
函数只是返回一窜单个的值,要想得到数组必须要将返回值重建数组
例:
function fun_name {
local array
array=($(echo "$@"))
length=$#
for (( a = 0 ;a < $length; a++))
do
array[$a]=$[ ${array[$a]} + 3 ]
done
echo ${array[*]}
}
var=(1 2 3 4 5)
variable=($(fun_name ${var[*]}))
echo ${variable[*]}
例子中演示了将一个数组的值每个元素都加上3然后返回,再将值重建为数组
函数递归:
自己调用自己
例:计算一个数的阶乘
function fun_name {
if [ $1 -eq 1 ] ; then
echo 1
else
local temp=$[ $1 - 1 ]
local result=$(fun_name $temp)
echo $[ $result * $1 ]
fi
}
fun_name 5
创建库:
source filepath 或 . filepath 注意在filepath前有个点
例1:source ./demo.sh 导入库文件
例2:. ./demo.sh 导入库文件,前面有个点和空格
在命令行上使用函数:
可以直接在命令行上定义函数,单行用分号分格,多行回车即可,然后就可以在整个系统中使用了,退出shell函数就会消失。
例1:
function fun_name { echo $[ $1 / $2 ] }
fun_name 6 2
例2:
function fun_name {
> echo $[ $1 / $2 ]
> }
fun_name 6 2
在.bashrc中定义函数:
可以直接在.bashrc中定义函数,也可以将写好的函数库用source引入到该文件中。这样就可以在子shell、命令行、脚本中等任何地方自己使用了。
例:
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
function fun_name { #定义函数
echo $[ $1 * $2 ]
}
source /home/bin/func.sh #引入库到.bashrc中
shtool函数库安装与使用:
下载:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz
解压:tar -zxvf shtool-2.0.8.tar.gz
安装:
./configure 检查所需的软件并修改配置文件
make
make install
使用:
shtool [options] [function [options] [args]] shtool函数的使用格式
例:shtool platform