linux下使用shell定义和调用函数的用法

本文详细介绍了在Linux Shell中定义和调用函数的方法,包括函数的基本语法、调用方式、引用、定义顺序、覆盖规则、返回值、输出保存、参数传递、变量作用域以及递归计算等核心概念,并通过实例进行演示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

################函数#############

(1).语法

	函数名() {
		函数体
		return n
	}

	function 函数名(){
		函数体
		return n
	}

(2).调用函数

	#!bin/bash
	function fun1() {
		echo "westos"
	}

	fun1

在这里插入图片描述
(3).引用函数

每次引用函数时,bash回重新回到函数的定义 ,用一个脚本来理解
打出5个echo输出结束循环并且结束后打出一次输出
可见每次输出后都重新读取函数的定义i am a boy

在这里插入代码片

	#!bin/bash
	function fun1() {
		echo "i am boy"
	}

	count=1
	while [ $count -le 5 ]
	do
		fun1
		count=$[ $count + 1 ]
	done

	echo "end of loop"

	fun1
	echo "end of script"

在这里插入图片描述
sh -x (脚本)可以看脚本如何运行来调式脚本
在这里插入图片描述
(4)使用函数要先定义

下面这个脚本在使用fun2之后才定义,会报错

	#!bin/bash
	count=1
	echo "before function definition"

	function fun1() {
		echo "fun1"
	}

	while [ $count -le 5 ]
	do
	 	fun1
		count=$[ $count + 1 ]
	done

	echo "end of loop"

	fun2
	function fun2() {
		echo "fun2"
	
	}

在这里插入图片描述
在这里插入图片描述
(5).定义同样的函数时会覆盖掉同名函数

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

在这里插入图片描述
可见每一次定义fun1都会覆盖上一个定义

(6).返回值

	#!/bin/bash
	function fun1() {
	    echo "trying to display a non-existent file"
	    ls -l westosfile &> /dev/null
	}
 
	echo "test the function:"
	fun1
	echo "The exit status is : $?"

在这里插入图片描述
函数退出时返回值非0时执行有错误

当我们设置return 0时输出的返回值为0即使执行的结果报错
注意return 0必须写在定义函数内容里
同理能修改为任意数字

	#!/bin/bash
	function fun1() {
	    echo "trying to display a non-existent file"
	    ls -l westosfile &> /dev/null
	    return 0
	}
 
	echo "test the function:"
	fun1
	echo "The exit status is : $?"

在这里插入图片描述

return可以在后面接一个函数改变返回值为运算结果

	#!/bin/bash

        function db1() {
            read -p "Enter a value:" value
            return $[ $value * 2 ]
        }
	db1
     	   echo "The new value is $?"

在这里插入图片描述
可见$?变为了输入值乘2

(7).使用函数输出

这样能把函数输出保存在shell变量中
可以获得任何类型的函数输出保存到变量里

	#!/bin/bash
	function db1() {
		read -p "enter a value:" value
		echo $[ $value * 2 ]
	}
	
	result=`db1`
	echo "the new value is $result"

在这里插入图片描述
(8).函数中使用变量
可以向函数中传递参数
函数名会在$0变量中定义
函数命令行上的任何参数都会通过$1,$2定义
$#来判断传给函数的参数数目

写脚本运算两数字相乘,输入数字多于或少于两个数字报错

	#!/bin/bash
	function fun1() {
	    echo $[ $1 * $2 ]
	}
 
	if [ $# -eq 2 ];then
	    value=`fun1 $1 $2`
	    echo "The result is $value"
	else
	    echo "Usage:fun1 a b"
	fi

在这里插入图片描述

(9).设置当函数没有获得$1值时,和获得值的不同情况执行不同函数

写脚本输入空格输出-1,输入两个数输出相加结果,输入一个数等于自身相加

	#!/bin/bash
	a=$1
	b=$2
 
	function kong() {
	    echo "-1"
	}
	function dan() {
	    echo " $a + $a = $[a+a] "
	}
	function shuang() {
	    echo " $a + $b = $[a+b] "
	}
		if [ $# == 0 ];then
		kong
		elif [ $# == 1 ];then
		dan
		elif [ $# == 2 ];then
		shuang
		else 
	 	echo " command error "
	 	fi

在这里插入图片描述
#############变量的作用域#####################
1.全局变量在函数内和外都能用

这里函数内代表的是定义函数的大括号内

	#!/bin/bash
	function db1() {
		value=$[ $value * 2 ]
	}

	read -p "enter a value: " value
	db1
	echo " the new value is:" $value

在这里插入图片描述
2.局部变量
定义用local $value
此时在定义函数的大括号外输入$value时显示的值与定义函数的大括号内的修改无关
用脚本证明

	#!/bin/bash
	function fun1() {
	    local temp=$[ $value + 5 ]
	    result=$[ $temp * 2 ]
	}
 
	temp=4
	value=6
 
	fun1
 
	echo "The result is $result"
	if [ $temp -gt $value ];then
	    echo "temp is larger"
	else
	    echo "temp is smaller"
	fi

在这里插入图片描述

################函数第归##############
1.第归计算阶乘

	#!/bin/bash

	read -p "Num:" num

	result=1
	for i in `seq $num`
	do
		result=$[ $result * $i ]
	done

	echo "the result is $result"

在这里插入图片描述
用函数第归运算
for语句调用function

	#/bin/bash
	read -p "Num: " num
	        d=1


	function fun1(){
	        d=$[ $d * $i]
	}

        for i in `seq $num`
        do
        fun1
        done
        echo $d

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值