当前位置:网站首页>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
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- 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
- 基于unity的愤怒的小鸟设计
- Scala basic tutorial -- 18 -- set (2)
- 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
- Angry bird design based on unity
- DeFi生态NFT流动性挖矿系统开发搭建
- OpenCV的二值化处理函数threshold()详解
- 2021 Hefei informatics competition primary school group
- 启牛开的证券账户安全吗?
- Download the first Tencent technology open day course essence!
猜你喜欢
随机推荐
自由小兵儿
php伪原创api对接方法
国元期货是正规平台吗?在国元期货开户安全吗?
[发布] 一个测试 WebService 和数据库连接的工具 - DBTest v1.0
C#实现定义一套中间SQL可以跨库执行的SQL语句(案例详解)
2022CoCa: Contrastive Captioners are Image-Text Fountion Models
模板_大整数减法_无论大小关系
小发猫物联网平台搭建与应用模型
Scala基础教程--12--读写数据
【机器学习的数学基础】(一)线性代数(Linear Algebra)(上+)
6.26cf simulation match B: solution to array reduction problem
Scala基础教程--14--隐式转换
2022年字节跳动日常实习面经(抖音)
Leetcode fizzbuzz C # answer
DeFi生态NFT流动性挖矿系统开发搭建
Scala基础教程--13--函数进阶
2014合肥市第三十一届青少年信息学奥林匹克竞赛(小学组)试题
Unity给自己的脚本添加类似编辑器扩展的功能案例ContextMenu的使用
Detailed explanation of issues related to SSL certificate renewal
Go microservice (II) - detailed introduction to protobuf