杨浦科技网站建设,招聘平面设计,谷歌怎么做网站推广,做网站送邮箱shell脚本编程系列 向函数传递参数
函数可以使用标准的位置变量来表示在命令行中传给函数的任何参数。其中函数名保存在$0变量中#xff0c;函数参数则依次保存在$1、$2等变量当中#xff0c;也可以使用特殊变量$#来确定参数的个数
在脚本中调用函数时#xff0c;必须将参…
shell脚本编程系列 向函数传递参数
函数可以使用标准的位置变量来表示在命令行中传给函数的任何参数。其中函数名保存在$0变量中函数参数则依次保存在$1、$2等变量当中也可以使用特殊变量$#来确定参数的个数
在脚本中调用函数时必须将参数和函数名放在同一行 比如 func $value 10
#!/bin/bash
# passing parameters to a functionfunction addem {if [ $# -eq 0 ] || [ $# -gt 2 ]thenecho -1elif [ $# -eq 1 ]thenecho $[ $1 $1 ]elseecho $[ $1 $2 ]fi
}echo -n Adding 10 and 15:
value$(addem 10 15)
echo $value
echo -n Let’s try adding just one number:
value$(addem 10)
echo $value
echo -n Now trying adding no numbers:
value$(addem)
echo $value
echo -n Finally, try adding three numbers:
value$(addem 10 15 20)
echo $value由于函数使用位置变量访问函数参数所以无法直接获取脚本的命令行参数。即使在函数内部使用了$1和$2变量但它们和脚本主体中的$1和$2变量不是一回事
#!/bin/bash
# trying to access script parameters inside a functionfunction badfunc1 {echo $[ $1 * $2 ]
}if [ $# -eq 2 ]
thenvalue$(badfunc1)echo The result is $value
elseecho Usage: badtest1 a b
fi要在函数中使用脚本的命令行参数必须调用函数时手动将其传入
#!/bin/bash
# trying to access script parameters inside a functionfunction func7 {echo $[ $1 * $2 ]
}if [ $# -eq 2 ]
thenvalue$(func7 $1 $2)echo The result is $value
elseecho Usage: badtest1 a b
fi在函数中处理变量 全局变量 全局变量是在shell脚本内任何地方都有效的变量如果在脚本的主体部分定义了一个全局变量那么就可以在函数内读取它的值。类似的在函数内定义了一个全局变量那么也可以在脚本的主体部分读取它的值。默认情况下脚本中定义的任何变量都是全局变量 局部变量 无需在函数中使用全局变量任何在函数内部使用的变量都可以被声明为局部变量。只需要在变量前面加上local关键字即可local关键字可以保证变量仅仅在该函数中有效如果函数之外有同名变量那么shell会保持这两个变量的值互不干扰。 #!/bin/bash
# demonstrating the local keywordfunction func1 {local temp$[ $value 5 ]result$[ $temp * 2 ]
}temp4
value6func1
echo The result is $result
if [ $temp -gt $value ]
thenecho temp is larger
elseecho temp is smaller
fi数组变量 将数组变量当做当个参数传递并不会起作用。如果试图将数组变量作为函数参数进行传递则函数只会提取数组变量的第一个元素 #!/bin/bash
# trying to pass an array variablefunction testit {echo The parameters are: $thisarray$1echo The received array is ${thisarray[*]}
}myarray(1 2 3 4 5)
echo The original array is: ${myarray[*]}
testit $myarray必须先将数组变量拆解成多个数组元素然后将这些数组元素作为函数参数传递而在函数内部将所有的参数重新组合成一个新的数组变量 #!/bin/bash
# adding values in an arrayfunction addarray {local sum0local newarraynewarray(echo $)for value in ${newarray[*]}dosum$[ $sum $value ]doneecho $sum
}myarray(1 2 3 4 5)
echo The original array is: ${myarray[*]}
# arg1$(echo ${myarray[*]})
# result$(addarray $arg1)
result$(addarray ${myarray[*]})
echo The result is $result从函数中返回数组先用echo语句按照正确顺序输出数组的各个元素然后脚本再将数组元素重组成一个新的数组变量。 #!/bin/bash
# returning an array valuefunction arraydblr {local origarraylocal newarraylocal elementslocal iorigarray($(echo $))newarray($(echo $))elements$[ $# - 1 ]for (( i 0; i $elements; i )){newarray[$i]$[ ${origarray[$i]} * 2 ]}echo ${newarray[*]}
}myarray(1 2 3 4 5)
echo The original array is: ${myarray[*]}
arg1$(echo ${myarray[*]})
result($(arraydblr $arg1))
echo The new array is: ${result[*]}