shell脚本函数声明,调⽤
shell脚本中函数的声明, 调⽤,处理结果的返回等问题。
1. 函数声明
1.1 函数需要先声明后调⽤, 声明和调⽤有顺序要求。
1.2 shell中的函数返回值只能是数字, 返回0表⽰执⾏成功, 返回其他类型的值时会报错:numeric argument required 1.3 因函数返回值被限制的问题, 所以需要定义全局变量来获取函数的处理结果。
1.4 函数的调⽤⽅式: 函数名 参数列表
demo:
#全局变量:字符串去除前后空格的结果
trimResult=""
#函数声明:trim字符串
function trim(){
#字符串为空不处理
if [ -z "$1" ]; then
trimResult=""
else
#去除字符串前后的空格
trimResult=$(echo $1|awk '{sub(/^ */,"");sub(/ *$/,"")}1')
fi
}
#函数调⽤:获取第⼀个“-”之后的trim之后的字符串, 字符串可能有空格,所以⽤引号包括
trim "$(echo ${temp#*-})"
#函数处理结果使⽤
echo "trim之后的内容为:$trimResult"
*****问题:shell默认空格为分隔符, 如果传递的参数中有空格,则会被认为是多个参数。
有两种解决⽅法:
⽅式⼀:使⽤引号将参数包括起来
#传递带有空格的参数
trim "first paramter"
⽅式⼆:重置默认分隔符
#!/bin/sh
function test(){
echo "all params=$@"
echo "param_a=$1"
echo "param_b=$2"
}
param1="aa bb"
echo 'invoke: test $param1, '"param1=$param1"
test $param1
param2="11 22"
echo 'invoke: test "$param2", '"param2=$param2"
test "$param2"
#备份默认分隔符
IFS_BAK=$IFS
#指定新的分隔符
IFS="!!"
echo 'change default separator, invoke: test $param1,'" param1=$param1"
test $param1
#恢复系统默认分隔符
IFS=$IFS_BAK
执⾏结果: 由结果可知,使⽤引号或者修改默认分隔符后, 带空格的参数结构不会被破坏
invoke: test $param1, param1=aa bb
all params=aa bb
shell脚本返回执行结果param_a=aa
param_b=bb
invoke: test "$param2", param2=11 22
all params=11 22
param_a=11 22
param_b=
change default separator, invoke: test $param1, param1=aa bb
all params=aa bb
param_a=aa bb
param_b=
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论