当前位置:网站首页>Shell 编程核心技术《三》
Shell 编程核心技术《三》
2022-07-04 17:47:00 【Wu_Candy】
今天将分享如何来具体编写一个 Shell 脚本,并掌握编写 Shell 脚本的必备知识。
想要编写一个 Shell 脚本,需要的必备知识: 1、 首先需要掌握的是注释,注释以 # 开头,用于增加脚本可读性; 2、 其次是参数,我们需要给脚本传入参数并解析它; 3、 最后是函数封装,以及掌握脚本是如何执行和调试的。
注释
1、首先我们来看下注释:
使用vim创建一个文件,当然你也可以使用 vs code 等其他编辑器,vs code 可以支持语法高亮,也是非常不错的,输入 vim /tmp/test_001.sh 指令创建了 test_001.sh 文件。
2、接下来开始编写脚本:
按i键进入编辑模式,并输入注释 # this is a test script! 用来告诉大家这个脚本是干什么的,当然注释不是必需的,只是为了增加可读性,同时Shell也不会执行注释语句。
参数
当脚本开始执行,就需要我们掌握系统默认的参数解析规则。当传递一个参数给脚本时,它是怎样被解析的呢?
1、$0 表示被执行的程序,也就是当前脚本;
2、1、2 分别表示传递的第 1 个和第 2 个参数,Shell 默认只支持 9 个参数,如果你需要支持更多的参数可以使用 shift;
3、@、* 表示所有的参数,但不包含
4、${#*}、${#@} 表示参数的个数;
5、{*:1:3}、{*:
解释说明:001、@与*的区别如下:
使用命令:sh /tmp/test_difference.sh执行结果如下:
可以看到不加引号时,二者都是返回传入的参数,但加了引号后,此时*把参数作为一个字符串整体(单字符串)返回,@把每个参数作为一个字符串返回
002、${#*}与${#@}的用法如下:
执行结果如下:
从结果可知二者都是表示参数的个数
003、{*:1:3}、{*:
如上图所示,可知:{*:1:3}表示取的是前3个参数的值,{*:
下面继续编写脚本:
如图所示,并打印 a0=0、a1=1 a2=2,以及 @ 和 *。执行脚本我使用的命令是:sh /tmp/test_001.sh,在执行结果中 0 是当前的文件名,但此时参数没有值,参数个数为空。
我们输入参数 a,b 传递给脚本,可以看到输出结果中第一个参数是 a,第二个参数是 b,这就是参数的解析规则。
函数
最后是函数,函数是以函数名()后跟 {} 括起来的结构内容组成,函数可以实现一些功能封装,同时函数也支持与脚本类似的参数解析逻辑。
如上图所示,定义一个名为:helloworld的 函数,在函数中通过 if 语句判断第一个参数 $1 是否等于 python,如果等于就打印 python auto tester。然后调用helloworld 函数,并传入一个名为:python的参数,系统打印输出 python auto tester。
我们还可以把上面直接在命令行输入的函数稍微封装一下,放入shell脚本的函数中并进行调用,通过 elif 判断 $1 是否等于 java,如果等于 java 就打印 java auto tester。
调用函数的执行结果如下:
执行并传入 python 参数,你可以看到最终打印了 python auto tester。
如果传入参数为:java时,则打印输出:java auto tester
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- What if the self incrementing ID of online MySQL is exhausted?
- Wanghongru research group of Institute of genomics, Chinese Academy of Agricultural Sciences is cordially invited to join
- Scala基础教程--18--集合(二)
- Scala basic tutorial -- 20 -- akka
- 千万不要只学 Oracle、MySQL!
- How to modify icons in VBS or VBE
- Technology sharing | interface testing value and system
- 物联网应用技术的就业前景和现状
- Don't just learn Oracle and MySQL!
- 模板_大整数减法_无论大小关系
猜你喜欢
升级智能开关,“零火版”、“单火”接线方式差异有多大?
LeetCode第300场周赛(20220703)
奥迪AUDI EDI INVOIC发票报文详解
Nebula importer data import practice
Wanghongru research group of Institute of genomics, Chinese Academy of Agricultural Sciences is cordially invited to join
Scala基础教程--15--递归
Bi skills - permission axis
自由小兵儿
node_exporter部署
ThreadLocal原理与使用
随机推荐
Scala基础教程--20--Akka
使用canal配合rocketmq监听mysql的binlog日志
The 15th youth informatics competition in Shushan District in 2019
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
LeetCode第300场周赛(20220703)
Using SSH
Other InterSystems%net tools
Torchdrug tutorial
OpenCV的二值化处理函数threshold()详解
Deleting nodes in binary search tree
Safer, smarter and more refined, Chang'an Lumin Wanmei Hongguang Mini EV?
The CDC of sqlserver can read the data for the first time, but it can't read the data after adding, deleting and modifying. What's the reason
What if the self incrementing ID of online MySQL is exhausted?
2022养生展,健康展,北京大健康展,健康产业展11月举办
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
876. Intermediate node of linked list
Nebula Importer 数据导入实践
Scala basic tutorial -- 19 -- actor
1672. Total assets of the richest customers
2022CoCa: Contrastive Captioners are Image-Text Fountion Models