当前位置:首页 > CN2资讯 > 正文内容

linux function函数 linux函数定义

2天前CN2资讯

D15

Shell函数是Shell脚本中由命令集和语句组成的代码块,这个代码块可以被其他脚本或是脚本中的其他部分所调用,所以Shell函数可以使程序模块化,即把代码分隔成独立的任务块。这样,可以重用代码块。

 

1. 函数的定义

语法:

#函数名 [function] function_name() #写不写function关键字取决于用户习惯,如果写了function可以不用() { #函数体,在函数中执行的命令行 commands... #参数返回,return语句是可选的, #如果没有,则以函数最后一条命令的运算结果作为返回值 #如果使用return,则返回数值n [ return [n]; ] } #也可以在一行内定义一个函数,各命令行需要用;隔开 function function_name { command1; command2; ... commandN; } #或者 function_name() { command1; command2; ... commandN; }

 

可以使用内部命令unset的-f选项来取消函数的定义。

$ fun_a() { echo "This is function a."; } #定义 $ fun_a #执行 This is function a. $ unset -f fun_a #取消定义 $ fun_a #尝试失败 -bash: fun_a: command not found

 

 

2. 函数的参数、变量与返回值

1)向函数传递参数

Shell函数有自己的命令行参数,使用特殊变量$1,$2...$n(位置参数)来访问传递给它的参数。

函数定义语法:

function_name(){ arg1=$1 arg2=$2 command on $arg1 }

调用参数语法:

function_name input1 input2

这里:

function_name是函数名;

input1是参数1,即传递给函数的第一个参数$1;

input2是参数2,即传递给函数的第二个参数$2。

示例:

$ cat args.sh #!/bin/bash #20200525 passed(){ a=$1 echo "passed(): \$0 is $0" #打印第0个参数,即脚本名称 echo "passed(): \$1 is $1" #打印第1个参数,即输入的第一个数据 echo "passed(): \$a is $a" #打印赋值给a的数据,即第1个参数 echo "passed(): total args $#" #打印参数个数 echo "passed(): all args(\$@) - \"$@\"" #打印所有参数 echo "passed(): all args(\$*) - \"$*\"" #打印所有参数 } echo "###########calling passed No.1#############" #第一次调用函数,输入一个参数 passed one echo "###########calling passed No.2#############" #第二次调用函数,输入三个参数 passed one two three #执行 $ ./args.sh ###########calling passed No.1############# passed(): $0 is ./args.sh passed(): $1 is one passed(): $a is one passed(): total args 1 passed(): all args($@) - "one" passed(): all args($*) - "one" ###########calling passed No.2############# passed(): $0 is ./args.sh passed(): $1 is one passed(): $a is one passed(): total args 3 passed(): all args($@) - "one two three" passed(): all args($*) - "one two three"

 

2)本地变量

默认情况下脚本中的所有的变量都是全局的,在函数中修改一个变量将改变这个脚本中此变量的值,可能产生问题。

可以使用local命令来创建一个本地变量。

语法:

local var=value local varName function_name(){   local var=$1   command on $var }

注意:

local命令只能在函数内部使用;

local命令将变量名的可见范围限制在函数内部。

示例$ cat localarg.sh

#!/bin/bash #20200525 a="normal_a" #外部变量a funca() { local a=$1; echo "local arg a is: $a."; } #funca中的变量a定义为local echo "a before calling funca: $a" funca func_a #调用funca,设置了local变量a的值 echo "a after calling funca: $a" b="normal_b" #外部变量b funcb() { b=$1; echo "arg b is $b."; } #funcb中的变量为普通变量 echo "b before calling funcb: $b" funcb func_b #调用funcb,设置了变量b的值 echo "b after calling funcb: $b" #执行 $ ./localarg.sh a before calling funca: normal_a local arg a is: func_a. #funca中的local变量a是调用函数时的取值 a after calling funca: normal_a #外部变量a的值没有被修改 b before calling funcb: normal_b arg b is func_b. b after calling funcb: func_b #外部变量b的值被修改了

 

3)return命令

示例:

$ cat #!/bin/bash #20200525 checkpid() { local i for i in $* do [ -d "/proc/$i" ] && return 0 #如果进程文件夹存在,则返回0 done return 1 #否则返回1 } echo "#########checkpid of existing proc############" checkpid 24249 #存在的进程,返回0 echo $? echo "#########checkpid of none proc############" checkpid 4444 #不存在,返回1 echo $? #执行 $ ./ #########checkpid of existing proc############ 0 #########checkpid of none proc############ 1

 

4)函数返回值测试

采用$?得到最近一次执行的前台命令的退出状态。

echo "#########checkpid of several procs########" checkpid $pid1 $pid2 $pid3 if [ $? = 0 ] #判断执行结果 then echo "One of these is running!" else echo "None is running!" fi

 

本节结束

 

欢迎大家评论交流,发现博文中存在的问题一定要留言哦



    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/25844.html

    分享给朋友:

    “linux function函数 linux函数定义” 的相关文章

    Windows SSH 连接云服务器的安全与便捷指南

    当我谈到SSH时,首先想到的是它的安全性和便利性。SSH,或者说安全外壳协议(Secure Shell),是一种加密网络传输协议。它的主要目的是在不安全的网络环境中,提供一个安全的传输机制。这对远程管理和数据传输尤其重要。实际上,SSH相当于在客户机和服务器之间创建了一个安全的隧道,确保我发送和接收...

    选择日本不限流量VPS的最佳方案与优化建议

    日本不限流量VPS市场现状 日本的VPS市场,尤其是不限流量的产品,正迎来一个快速发展的阶段。随着互联网技术的进步,亚洲的网络环境发生了翻天覆地的变化。尤其是在日本,不限流量VPS因其连接速度快、数据中心服务优质而广受欢迎,对那些需要持续大流量的网站运营者来说,这可是一个无与伦比的选择。 我发现,随...

    GoDaddy虚拟主机全面指南:轻松搭建您理想的网站

    GoDaddy虚拟主机概述 提到GoDaddy,很多人首先会想到它作为域名注册商的地位。但是,GoDaddy不仅限于此,提供虚拟主机服务的实力也不容小觑。对于想要在网上建立个人博客、企业站点或者电子商务平台的朋友来说,GoDaddy的虚拟主机服务是一个值得考虑的选项。它的多样性和可靠性,吸引了不少新...

    高性价比的斯巴达VPS评分与使用推荐

    斯巴达VPS概述 在互联网上,选择合适的服务器解决方案对每个业务来说都是至关重要的。虚拟专用服务器(VPS)便是其中一项极具吸引力的选择。简单来说,VPS就像是一个在物理服务器上运行的独立小房间。每个VPS都有自己的操作系统和资源,允许用户拥有更高的自由度和灵活性。这种设置特别适合那些需要比共享主机...

    全面掌握BBR加速技术,提升网络传输效率的终极指南

    在现代网络传输中,带宽的利用与数据传输的速度变得尤为重要。提到这里,BBR加速即以其独特的方式引起了不少人的关注。BBR,或者称为Bottleneck Bandwidth and Round-trip propagation time,是一种新的TCP拥塞控制算法,旨在优化网络性能。BBR的核心思想...

    香港VPS:灵活高效的网站托管解决方案

    在互联网技术不断发展的今天,VPS(虚拟专用服务器)逐渐成为网站建设和在线应用的热门选择。简单来说,VPS是一种虚拟化的服务器环境,它通过将物理服务器划分成多个独立的虚拟服务器,为用户提供更高的灵活性与控制权。这意味着,用户可以拥有一台独立的服务器环境,但成本却比购买一台专属服务器要低得多。 VPS...