shell的函数基础知识

79 篇文章 0 订阅
4 篇文章 0 订阅

1.语法

方法一:
	函数名() {
	函数体
	return n
	}
方法二:
	function 函数名() {
	函数体
	return n
	}                                                                         

2.调用函数

#!/bin/bash
function abc() {
        echo "Hello"
}
abc

在这里插入图片描述
3.引用函数
每次引用函数时,bash会重新回到函数的定义

[root@localhost mnt]# cat fun_result.sh 
#!/bin/bash
function db1() {
	read -p "input a value" value
	echo $[ $value * 2 ]
}
result=`db1`
echo "new value is $result"
[root@localhost mnt]# sh fun_result.sh
input a value3	
new value is 6

4.函数不一定要在最开始定义,但是如果函数在定义前就使用,会报错

#!/bin/bash
count=1
echo "----------------"
function fun1() {
    echo "aaa"
}
    fun1
echo "----------------"
fun2
function fun2() {
    echo "bbb"
}

在这里插入图片描述
5.函数名必须是唯一的,如果重新定义了函数,新的函数会覆盖旧的

#!/bin/bash
function fun1() {
    echo "first fun1"
}
fun1
function fun1() {
    echo "second fun1"
}
fun1
function fun1() {
    echo "third fun1"
}
echo "End"

在这里插入图片描述
6.返回值
1)默认退出状态码:默认情况下,函数的退出状态码是函数中最后一条命令返回的退出状态码

2)使用return命令
shell使用return命令来退出函数并返回特定的退出状态码
3)使用函数输出
将函数的输出保存在shell变量中可以获得任何类型的函数输出并将其保存到变量中
4)函数中使用变量
可以想函数中传递参数
函数名会在$0变量中定义,函数命令行上的任何参数都会通过$1, 2 定 义 , 2定义, 2#来判断传给函数的参数数目
5)函数不能直接从命令行获取脚本的参数值
2.变量的作用域
1)全局变量:任何地方都生效的变量,默认情况下,脚本主体内定义全局变量,函数内可以用,函数外也可以用
2)局部变量:
定义方法:local value

#!/bin/bash
function fun1() {
        local temp=$[ $value + 5 ]     定义一个局部变量temp,但其并不在全局生效
        result=$[ $temp * 2 ]
}
temp=1          定义全局变量temp为1
value=5

fun1

echo "The result is $result"
if [ $temp -gt $value ];then         比较变量temp和value大小
        echo "$temp,temp is larger"
else
        echo "$temp,temp is smaller"        输出变量temp
fi

由下图可以看出输出的变量temp为全局变量temp。
在这里插入图片描述
3.函数递归
计算阶乘

方法一:
#!/bin/bash
function jc() {
    if [ $1 -eq 1 ];then
        echo 1
    else
        local temp=$[ $1 - 1 ]
        local result=`jc $temp`
        echo $[ $result * $1 ]
    fi
}

read -p "Enter a value:" value
result=`jc $value`
echo "The jc of $value is: $result"
------------------------------------------------
结果:
[root@localhost mnt]# sh fun_recursion.sh
Enter a value:2
The jc of 2 is: 2
[root@localhost mnt]# sh fun_recursion.sh
Enter a value:1
The jc of 1 is: 1
[root@localhost mnt]# sh fun_recursion.sh
Enter a value:4
The jc of 4 is: 24
[root@localhost mnt]# sh fun_recursion.sh
Enter a value:5
The jc of 5 is: 120
方法二:
#!/bin/bash
read -p "Num:" num
result=1
for i in `seq $num`
do
        result=$[ $result * $i ]
        ((num--))
done
echo "The result is:" $result

结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值