当前位置:网站首页>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
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
边栏推荐
- One question per day (2022-07-02) - Minimum refueling times
- [mathematical basis of machine learning] (I) linear algebra (Part 1 +)
- 数组中的第K个最大元素
- Scala基础教程--19--Actor
- 启牛开的证券账户安全吗?
- 2022 ByteDance daily practice experience (Tiktok)
- 从实时应用角度谈通信总线仲裁机制和网络流控
- LeetCode第300场周赛(20220703)
- Esp32-c3 introductory tutorial questions ⑫ - undefined reference to ROM_ temp_ to_ power, in function phy_ get_ romfunc_ addr
- DeFi生态NFT流动性挖矿系统开发搭建
猜你喜欢

Safer, smarter and more refined, Chang'an Lumin Wanmei Hongguang Mini EV?

Go microservice (II) - detailed introduction to protobuf

Scala基础教程--19--Actor

Go微服务(二)——Protobuf详细入门

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

Uni app and uviewui realize the imitation of Xiaomi mall app (with source code)

ThreadLocal原理与使用

My colleagues quietly told me that flying Book notification can still play like this

与二值化阈值处理相关的OpenCV函数、方法汇总,便于对比和拿来使用

Scala basic tutorial -- 17 -- Collection
随机推荐
Scala basic tutorial -- 19 -- actor
[go ~ 0 to 1] read, write and create files on the sixth day
IBM WebSphere MQ retrieving messages
Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
Li Chi's work and life summary in June 2022
Rookie post station management system based on C language
[uniapp] uniapp development app online Preview PDF file
Wanghongru research group of Institute of genomics, Chinese Academy of Agricultural Sciences is cordially invited to join
Technology sharing | interface testing value and system
IBM WebSphere MQ检索邮件
A method of using tree LSTM reinforcement learning for connection sequence selection
Build your own website (15)
prometheus安装
Download the first Tencent technology open day course essence!
千万不要只学 Oracle、MySQL!
In flinksql, in addition to data statistics, is the saved data itself a state
Is Guoyuan futures a regular platform? Is it safe to open an account in Guoyuan futures?
Cache é JSON uses JSON adapters
Scala basic tutorial -- 20 -- akka
One question per day (2022-07-02) - Minimum refueling times