shell脚本函数声明,调用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/changerzhuo_319/article/details/82774881

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
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=

猜你喜欢

转载自blog.csdn.net/changerzhuo_319/article/details/82774881