当前位置:网站首页>Shell 编程核心技术《四》
Shell 编程核心技术《四》
2022-07-04 17:47:00 【Wu_Candy】
今天分享的内容与Shell 编程核心技术《三》是链接的,需要结合着一起来阅读。
函数
接下来,我们把它封装成一个 tester_level函数,有了函数之后就可以在执行的过程中随时进行调用来实现功能封装和逻辑复用。
从上图中发现,调用test_001.sh脚本时并传入一个参数为:java,并没有输出我们预期的java auto tester,原因是因为只定义函数是不会得到执行的,比如此时没有输出任何有关的auto tester结果。
而我们运行 tester_level 函数并将 2 参数传给它,此时 2 是脚本的第二个参数,但却是 tester_level函数的第一个参数。
执行脚本,传入一个参数 java,没有任何显示,再传入一个 python 仍没有反应,直到传入 python java 两个参数后,才输出 java auto tester,因为 tester_level 接收的是整个脚本的第二个参数。
权限位执行Shell 脚本
通过前面案例的演示我们已经掌握使用 sh 执行脚本,但如果我们不想使用 sh 执行脚本,如果想让系统自动进行解析,可以通过加权限位实现。
首先查看test_001.sh的权限位目前是多少,可以使用命令:ls -l /tmp/test_001.sh,如上图所示,可以发现权限位中没有x,即没有可执行权限。
当我们直接输入命令:/tmp/test_001.sh,即test_001.sh文件所在的全路径时,报错提示:Permission denied没有执行权限。
如上图所示,使用命令:chmod +x /tmp/test_001.sh给文件添加可执行权限。
如上图所示,当没有给文件test_001.sh文件添加可执行权限时,直接使用命令:/tmp/test_001.sh是会报permission denied的错误的,但当给文件添加了可执行权限后,再次使用命令:/tmp/test_001.sh执行脚本时,就可以执行成功,没有报错。
添加PATH变量快速执行Shell 脚本
假如test_001.sh文件的全路径很长,如/user/candy/python/shell/project_person_tmp/test_001.sh,我们想要执行test_001.sh文件,按照上面介绍的方法,需要输入test_001.sh文件所在的全路径才能执行,这样未免太过于繁锁,每次执行都得很清楚的记得test_001.sh文件所在的全路径并输入,有没有更简捷的方法,如只输入文件名:test_001.sh就可以直接运行脚本呢?答案是有的。
解决方案是:将/tmp这个路径加入到PATH变量中,这时输入test_001.sh命令直接执行就不会再报错了。
Shell 脚本执行时调试
当我们的Shell脚本写错了,该如何在执行过程中进行调试呢?
如上图所示,可以使用sh -x 命令,它可以在脚本运行时打印当前脚本的每一行命令,当脚本出错时就可以知道到底是哪一行出错了,它通过以 + 开头的输出来显示当前正在执行的是哪一行的 Shell 代码,有了它调试就变得非常方便。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- node_exporter部署
- 测试工程师如何“攻城”(上)
- From automation to digital twins, what can Tupo do?
- Scala基础教程--19--Actor
- Pb extended DLL development (super chapter) (VII)
- sqlserver的CDC第一次查询的能读取到数据,但后面增删改读取不到,是什么原因
- Don't just learn Oracle and MySQL!
- The latest progress of Intel Integrated Optoelectronics Research promotes the progress of CO packaging optics and optical interconnection technology
- 神经网络物联网应用技术学什么
- Nature microbiology | viral genomes in six deep-sea sediments that can infect Archaea asgardii
猜你喜欢
随机推荐
6.26CF模拟赛E:价格最大化题解
26. Delete the duplicate item C solution in the ordered array
2014 Hefei 31st youth informatics Olympic Games (primary school group) test questions
C language printing exercise
Nature microbiology | viral genomes in six deep-sea sediments that can infect Archaea asgardii
Lex and yacc based lexical analyzer + parser
26. 删除有序数组中的重复项 C#解答
2022-07-04: what is the output of the following go language code? A:true; B:false; C: Compilation error. package main import 'fmt' func
删除字符串中出现次数最少的字符【JS,Map排序,正则】
2021 合肥市信息学竞赛小学组
6.26CF模拟赛B:数组缩减题解
Scala基础教程--13--函数进阶
使用SSH
Li Chi's work and life summary in June 2022
php伪原创api对接方法
Principle and application of ThreadLocal
Caché JSON 使用JSON适配器
Go microservice (II) - detailed introduction to protobuf
What if the self incrementing ID of online MySQL is exhausted?
正则替换【JS,正则表达式】