linux的shell函数相关知识
来源:互联网 发布:哪些论坛分享软件 编辑:程序博客网 时间:2024/06/05 16:24
本文来自整理网络帖子,感谢大家分享。
一、Linux shell 函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
带参数的函数示例:
#!/bin/bashfunWithParam(){ echo "The value of the first parameter is $1 !" echo "The value of the second parameter is $2 !" echo "The value of the tenth parameter is $10 !" echo "The value of the tenth parameter is ${10} !" echo "The value of the eleventh parameter is ${11} !" echo "The amount of the parameters is $# !" echo "The string of the parameters is $* !"}funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
The value of the first parameter is 1 !The value of the second parameter is 2 !The value of the tenth parameter is 10 !The value of the tenth parameter is 34 !The value of the eleventh parameter is 73 !The amount of the parameters is 12 !The string of the parameters is 1 2 3 4 5 6 7 8 9 34 73 !"
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数:
二、Linux shell 函数 返回值
Shell函数返回值,一般有3种方式:return,argv,echo
shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回。
示例:
结果:
mytest 1
arg1 = 1
1
mytest 0
arg1 = 0
0
mytest 2
arg1 = 2
0
mytest 1 = arg1 = 1
arg1 = 1
mytest 0 = arg1 = 0
arg1 = 0
mytest 0
if fasle
arg1 = 1
mytest 1
arg1 = 0
mytest 0
end
获取函数的返回值通过调用函数,或者最后执行的值获得。
另外,可以直接用函数的返回值用作if的判断。
注意:return只能用来返回整数值,且和c的区别是返回为正确,其他的值为错误。
2) argv全局变量
这种就类似于C语言中的全局变量(或环境变量)。
示例:
结果:
mytest2
args 1
return 0
g_var=1
函数mytest2通过修改全局变量的值,来返回结果。
注: 以上两个方法失效的时候
以上介绍的这两种方法在一般情况下都是好使的,但也有例外。示例:
其中,test.txt 文件中的内容如下:
456:kkk123:yxb
123:test
结果:
yxbmytest3 here
1
yxb
g_var=0
mytest4 here
1
g_var=
可以看到mytest3在return了以后其实没有直接返回,而是执行了循环体后的语句,同时看到mytest4中也是一样,同时,在mytest4中,对全局变量的修改也无济于事,全局变量的值根本就没有改变。这个是什么原因那?
笔者认为,之所以return语句没有直接返回,是因为return语句是在管道中执行的,管道其实是另一个子进程,而return只是从子进程中返回而已,只是while语句结束了。而函数体之后的语句会继续执行。
同理,全局变量在子进程中进行了修改,但是子进程的修改没有办法反应到父进程中,全局变量只是作为一个环境变量传入子进程,子进程修改自己的环境变量,不会影响到父进程。
因此在写shell函数的时候,用到管道(cmd &后台进程也一样)的时候一定要清楚此刻是从什么地方返回。
3) echo 返回值
其实在shell中,函数的返回值有一个非常安全的返回方式,即通过输出到标准输出返回。因为子进程会继承父进程的标准输出,因此,子进程的输出也就直接反应到父进程。因此不存在上面提到的由于管道导致返回值失效的情况。在外边只需要获取函数的返回值即可。
示例:
结果:$? = 0
result = 0
have yxb, result is 0
这个方式虽然好使,但是有一点一定要注意,不能向标准输出一些不是结果的东西,比如调试信息,这些信息可以重定向到一个文件中解决,特别要注意的是,用到比如grep这样的命令的时候,一定要记得1>/dev/null 2>&1来避免这些命令的输出。
0 0
- linux的shell函数相关知识
- shell API 的相关知识
- 函数的相关知识
- 函数的相关知识
- 编写Linux Shell脚本相关知识
- linux的相关知识
- shell编程while的相关知识
- 梳理shell编程的相关命令知识
- 虚函数的相关知识
- 虚函数相关的知识
- 构造函数的相关知识
- shell脚本相关知识
- LINUX驱动IOCTL函数相关知识
- Linux 挂载点的相关知识
- Linux vi的相关知识
- linux 环境变量相关的知识
- linux相关的知识记录
- 函数的相关知识及函数指针
- oracle定时器
- 仿ios,网易,京东的搜索界面和功能
- Synchronized——实现原理、底层优化
- ubuntu下eclipse+pydev安装
- 网络流24题 负载平衡 费用流
- linux的shell函数相关知识
- sqlserver数据库通过脚本复制数据库
- 流程行业与离散行业的差别
- Centos7.0 安装Mysql
- openssl学习
- vue移动端错误信息弹出提示
- 日常bug
- 欢迎使用CSDN-markdown编辑器
- 关于Xcode提高读写速度遇到的问题和一些想法