linux function函数 linux函数定义
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
本节结束
欢迎大家评论交流,发现博文中存在的问题一定要留言哦
linux ioremap函数 linux function
解决Pine Script中could not find function reference iff错误的实用技巧
解决Pinescript中的could not find function reference iff问题
WordPress Hook Function 查询:掌握 Action Hooks 和 Filter Hooks 提升网站功能
loss function是什么:理解损失函数在机器学习中的重要性
Vectorfusion: Text-to-SVG by Abstracting Pixel-Based Diffusion Models
ReactNode vs ReactElement: Master the Differences to Avoid Errors and Boost React Performance