Shell语法(6)--方法传递参数机制
2020-05-01 本文已影响0人
刘小厨
函数
- Linux Shell 中的函数和大多数编程语言中的函数一样
- 将相似的任务或代码封装到函数中,供其他地方调用
定义函数有两种格式:
①:
name( )
{
command;
cmmand2 ;
}
②:
[ function ] funname [ ( ) ]
{
action;
[return int;]
}
举个例子:
#!/bin/bash
outParams1="参数一"
outParams2="参数二"
function test(){
params1="局部变量1"
params2="局部变量2"
echo $outParams1
echo $params1
echo "我是函数"
}
#函数调用,写在函数下方,直接函数名就可以调用
test
shell语法中没有形参
,我们看下如何在调用方法时传递参数:
#!/bin/bash
function test(){
# 打印第一个参数
echo $1
}
#调用方法传递一个参数 10
test 10
其中 $n表示第n个参数,不清楚的可以看下
Shell语法(1)--变量的定义和使用
传参可以通过调用方法时候传参,也可以通过脚本传参(终端执行sh文件时候传参),先看下第一种,举个栗子(阶乘):
#!/bin/bash
a=1
factorial () {
for i in `seq $1`
do
#let 运算符下也可以写成let a*=$i
let a=$a*$i
done
echo "$1的阶乘 $a"
}
factorial 10
#输出
#10的阶乘 362880
看下执行脚本时候传参:
#!/bin/bash
a=1
factorial () {
#这里接收的是调用方法时候传递的第一个参数
for i in `seq $1`
do
let a=$a*$i
done
echo "$1的阶乘 $a"
}
#这里接收的是执行脚本时候的第一个参数
factorial $1
#终端输入
# ./factorial.sh 5
#打印结果
5的阶乘 24
提示:上述shell函数执行结果为int类型的值,也就是说大于65535的值不会正常返回,比如上述代码执行# ./factorial.sh 10
打印结果为10的阶乘 0
,因为10的阶乘大于65535
函数的返回值
直接举个例子:
#!/bin/bash
fun1(){
#将用户输入参数赋值给num
read -p "请输入数值" num
let 2*$num
}
fun1
#$?表示上调语句的执行结果,是个状态码(0-255之间) 0表示成功
echo "fun1返回值 $?"
执行上述代码,输入数值10,终端输出fun1返回值 0
# ./return.sh
请输入数值10
fun1返回值 0
自定义返回值
将上述代码改为:
#!/bin/bash
fun1(){
read -p "请输入数值" num
return $[ 2*$num ]
}
fun1
echo "fun1返回值 $?"
执行上述代码,输入数值10,终端输出fun1返回值 20
,因为返回值在0-255
,所以我们输入127以上 的数字不会的到正确的结果:
# ./return.sh
请输入数值10
fun1返回值 20
-----------------------
# ./return.sh
请输入数值200
fun1返回值 144
注意: 在Shell中函数的返回结果是,最后一条指令的执行结果
!!!!!,如果我们想要返回值为字符串等类型,可以使用echo
指令做为函数的最后一条命令
示例:
#!/bin/bash
fun1(){
read -p "请输入数值" num
echo $[ 2*num ]
}
result=`fun1`
echo "fun1返回值 $result"
执行:
# ./return.sh
请输入数值200
fun1返回值 400