首页 > 系统相关 >【Shell】函数

【Shell】函数

时间:2023-04-25 17:56:26浏览次数:36  
标签:Shell return 函数 value echo 参数 test

函数

https://blog.csdn.net/weixin_67474417/article/details/124557280

1、语法

函数定义语法如下:

[ function ] funname [()] {
    action;
    [return int;]
}

说明 :

  1. 函数定义时,function 关键字可有可无。

  2. 函数返回值 - return 返回函数返回值,返回值类型只能为整数(0-255),如果函数的返回值超过255,超出时值将为除以256取余。如果不加 return 语句,shell 默认将以最后一条命令的运行结果,作为函数返回值。

  3. 函数返回值在调用该函数后通过 $? 来获得。

  4. 所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至 shell 解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

    #!/usr/bin/env bash
    
    f1
    
    f1(){
    	echo "f11"
    }
    # 这样子 就会报错
    

注意:当一个shell脚本里面定义了两个相同名的函数,最终的结果只会显示最后一个。

2、无参数

示例:

无返回值

#!/usr/bin/env bash
# function 可省略
function calc(){
	echo " Hello World"
}

calc
echo "the result is: $?" # $? 获取 calc 函数返回值

# 返回结果:
#Hello World
#the result is: 0

有返回值

#!/usr/bin/env bash
test(){
	read -p " 请输入一个数字: " num
	return $[$num*2]
}
test
echo "this function test  return value is " $?

# 返回结果:
# 请输入一个数字: 10
# this function test  return value is  20

# 返回结果:
# 请输入一个数字: 1000
# this function test  return value is  208

3、函数传参

​ 在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。

#!/usr/bin/env bash

add(){
	let sum=$1+$2
	return $sum
}

add $1 $2

echo "this function add  return value is " $?

# 返回结果
# ./add.sh 1 3
# this function add  return value is  4

4、函数变量的作用范围

  1. 函数在shell脚本中仅在当前shell环境中有效

  2. Shell脚本中变量默认全局有效

  3. 将变量限定在函数内部使用local命令

    1. 函数内部变量通过local来实现
    2. 通过定义myfun函数,在其内部设置局部变量i
    3. 函数内部和外部分别赋值,进行结果验证。

ps:

全局变量代表整体可以使用

局部变量代表的是全局变量里面可以使用其中一部分

示例

#!/usr/bin/env bash

test(){
	local i
	i=6
	echo $i
}

i=8
test
echo " i value is " $i

# 返回结果:
# 6
# i value is  8

如果把 local 去除掉,则返回的结果如下所示:

#6
#i value is  6

5、位置参数

位置参数是在调用一个函数并传给它参数时创建的变量。

位置参数变量表:

变量 描述
$0 脚本名称
$1...$9 第1个参数到地9个参数列表
${10}...$ 第 10 个到 N 个参数列表
$* or $@ 除了$0 外的所有位置参数
$# 不包括$0在内的位置参数的个数
$FUNCNAME 函数名称(仅在函数内部有值)

示例

#!/usr/bin/env bash

test(){
	let sum=$1+$2
	echo "脚本名称" $0
	echo "函数名称" $FUNCNAME
	echo "除了$0外的所有位置参数" $@
	echo "除了$0外的所有位置参数" $*
	echo "不包括$0在内的位置参数的个数" $#
	return $num
}

test $1 $2
echo "sum value is " $?


# 输出结果
# 脚本名称 ./func.sh
# 函数名称 test
# 除了./func.sh外的所有位置参数 1 3
# 除了./func.sh外的所有位置参数 1 3
# 不包括./func.sh在内的位置参数的个数 2
# sum value is  0

6、函数处理参数

特殊字符用来处理参数

变量 描述
$# 返回参数个数
$* 返回所有参数
? 脚本运行的当前进程 ID 号
$! 后台运行的最后一个进程的 ID 号
$@ 返回所有参数
$- 返回 Shell 使用的当前选项,与 set 命令功能相同。
$? 函数返回值

示例

#!/usr/bin/env bash

test(){
	echo "脚本运行的当前进程 ID 号:" ?
    echo "后台运行的最后一个进程的 ID 号:" $!
    echo "Shell 使用的当前选项:$-"
}

test

# 输出结果
# 脚本运行的当前进程 ID 号: 7
# 后台运行的最后一个进程的 ID 号:
# Shell 使用的当前选项:hB

标签:Shell,return,函数,value,echo,参数,test
From: https://www.cnblogs.com/HelloWxl/p/17353394.html

相关文章

  • 探索核函数的优势和缺陷
    探索核函数的优势和缺陷fromsklearn.datasetsimportload_breast_cancerfromsklearn.model_selectionimporttrain_test_splitfromsklearn.svmimportSVCimportmatplotlib.pyplotaspltimportnumpyasnpfromtimeimporttimeimportdatetimecancer=load_bre......
  • go语言 把python项目打包、变量类型、常量、函数基础、函数高级
    把python项目打包#https://zhuanlan.zhihu.com/p/624648232#python----》setuptools--》whl包结构公司内部写了包---》公司内部用---》开源出来公司写好的项目,打包好,发给客户,客户可以直接运行起来#你们下的第三方包都是:requests-2.28.2-py3-none-any.whlwhl......
  • Turndown 源码解析:一、辅助函数
    extend()Object.assign的补丁。functionextend(destination){for(vari=1;i<arguments.length;i++){varsource=arguments[i];for(varkeyinsource){if(source.hasOwnProperty(key))destination[key]=source[key];}}ret......
  • 【Shell】字符串
    单引号和双引号shell字符串可以用单引号'',也可以用双引号“”,也可以不用引号。单引号的特点单引号里不识别变量单引号里不能出现单独的单引号(使用转义符也不行),但可成对出现,作为字符串拼接使用。双引号的特点双引号里识别变量双引号里可以出现转义字符综上,推荐......
  • 【Shell】变量
    变量Bash中没有数据类型,bash中的变量可以保存一个数字、一个字符、一个字符串等等。同时无需提前声明变量,给变量赋值会直接创建变量。变量命名原则命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。中间不能有空格,可以使用下划线(_)。不能使用标点符号。不能使用......
  • 初等数学瞎扯Ⅲ:数论函数与筛法
    0.前置知识与基本定义\([op]\):值为\(1\)当且仅当方括号内条件为真。记为艾弗森括号唯一分解定理:一个正整数\(x\)可以被唯一分解为\(\prod\limits_{i=1}^mp_i^{c_i}\),其中\(\foralli\in[1,m],p_i\in\mathbb{P}\)。(关于\(\mathbb{P}\),详见初等数学瞎扯Ⅰ:同余相关)。......
  • Go-day2——go语言变量类型、常量、函数基础、函数高级
    目录一、go语言变量类型二、常量三、函数基础四、函数高级五、作业一、go语言变量类型#数字#int整数有正负int8int16int32int64 java byteshortintlong -int8一个字节表示(8个比特位)范围:-2的7次方到+2的7次方-1-int162个字节表......
  • C++ shared_ptr 虚析构函数 特殊
    classa{public:~a(){cout<<"a"<<endl;}classb:publica{public:~b(){cout<<"b"<<endl;}voidmain(){shared_ptrA;{shared_ptrB(newb());//智能指针内部,uses引用值为1A=B;//智能指针内部,uses引用值为2,子类父类的智能指针可以一起计数}//离开作用......
  • C语言函数大全-- q 开头的函数
    C语言函数大全本篇介绍C语言函数大全--q开头的函数1.qsort1.1函数说明函数声明函数功能voidqsort(void*base,size_tnmemb,size_tsize,int(*compar)(constvoid*,constvoid*));用于将指定数组按指定顺序进行排序参数:base:指向要排序的数组的......
  • powershell过滤当月过期用户
    echo"默认开始日期为【1】号|默认结束日期为【下月1】号"#获取过滤数据的月份$Start_Time =Read-Host"请输入开始月份"$End_Time =Read-Host"请输入结束月份"#假如用户需要的五月份的数据,结束月份加1,结束日期默认为1号$monthNum=[int]$End_Time#如果月份小于12,则......