当前位置:网站首页>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 代码,有了它调试就变得非常方便。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- Scala基础教程--12--读写数据
- ESP32-C3入门教程 问题篇⑫——undefined reference to rom_temp_to_power, in function phy_get_romfunc_addr
- 英特尔集成光电研究最新进展推动共封装光学和光互连技术进步
- node_exporter部署
- [发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
- 关于判断点是否位于轮廓内的一点思考
- Is the securities account opened by qiniu safe?
- Scala基础教程--16--泛型
- 建立自己的网站(15)
- 26. Delete the duplicate item C solution in the ordered array
猜你喜欢

Scala基础教程--13--函数进阶

Scala基础教程--18--集合(二)

Scala basic tutorial -- 20 -- akka

Li Kou brush question diary /day2/2022.6.24

Scala basic tutorial -- 19 -- actor

How is the entered query SQL statement executed?

Scala基础教程--17--集合

从实时应用角度谈通信总线仲裁机制和网络流控

LeetCode第300场周赛(20220703)

Process of manually encrypt the mass-producing firmware and programming ESP devices
随机推荐
One question per day (2022-07-02) - Minimum refueling times
Technology sharing | interface testing value and system
2021 合肥市信息学竞赛小学组
【uniapp】uniapp开发app在线预览pdf文件
Scala basic tutorial -- 20 -- akka
Scala基础教程--17--集合
Summary and sorting of 8 pits of redis distributed lock
How is the entered query SQL statement executed?
Scala basic tutorial -- 18 -- set (2)
ftp、sftp文件传输
整理混乱的头文件,我用include what you use
建立自己的网站(15)
prometheus安装
Nebula importer data import practice
Scala基础教程--15--递归
ByteDance dev better technology salon was successfully held, and we joined hands with Huatai to share our experience in improving the efficiency of web research and development
DeFi生态NFT流动性挖矿系统开发搭建
Have you guys ever used CDC direct Mysql to Clickhouse
The 15th youth informatics competition in Shushan District in 2019
C # implementation defines a set of SQL statements that can be executed across databases in the middle of SQL (detailed explanation of the case)