各位不好意思,最近加班 + 感冒,有三四天没更新了,python自动化脚本系列总共六期,基本已经囊括了编写python自动化脚本的所有基础函数和语法了。
大家如果没看过这个系列的话,可以参考下面的链接:
使用python自动化脚本执行shell命令,提前两小时下班(5)
如果大家对python感兴趣,想要系统学习,可以留言,我到时候开一个新的系列,从零开始每天一篇,入门python。
然后,考虑到,就算学习了上面所有的python自动化脚本编写方法,但是,我们一般还是要跟linux 操作系统打交道的,还是免不了使用python 调用linux 的系统命令,获取信息,或者使用python 调用shell 脚本。
理论上,自动化脚本编写时,到底选择python 还是 shell,主要就是看,自动化脚本的复杂程度,python 应用于一些处理复杂,需要频繁调试或者跨系统也可以使用的自动化脚本编写。
而shell 就是编写一些简单的,只能在linux 中使用的自动化脚本,它使用起来更为简单。
有时候,python 和shell 可能也需要互相调用,于是,要是想进阶,修炼成一个中级一点的自动化脚本开发人员的话,一定要对原生linux shell 脚本的编写有一定的理解。
所以,我想了一下,打算接下来几期,给大家介绍一下shell脚本的编写,帮助大家提高自己。
好吧,肺部哆嗦(废话不多说),我们开始吧。
今天是第0期,当然是简单介绍下,什么是shell 脚本,如何编写一个最简单的shell 脚本,一个完整的shell 脚本包含哪些部分?
请看下面示例:
什么是shell脚本呢? 什么是shell?
借用官方的解释:
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
上图就是一个世界上最简单的shell 脚本程序。
它包含两部分, 第一部分是写在文件头部的
#!bin/bash, 它是一个标识,告诉linux ,以下的文本需要用 bash这个执行程序去解析。
echo hello world 中,echo 是linux 的打印命令, 后面的 hello world 是打印内容。(有人可能会疑惑,为啥hello world 打印不用加双引号,这是因为shell中默认是字符类型的,会默认把hello world 认为是字符串,这里只是为了演示这个事情,一般书写还是要用引号括上比较好,单引号跟双引号还存在不同,下面我们再慢慢讲)。
上面的代码我们添加可执行权限,并且执行后,结果如下:
chmod +x 给我们编写的脚本赋予可执行权限,然后可以使用 ./ 进行执行(使用./, sh执行,使用source 也可以执行,这几种执行方式也存在一点区别,后面再讲)。
我们看到,正常打印出了hello world。
一般学习一门语言,就是从hello world 开始的,但是,各位小哥哥小姐姐们可能下面就开始不满意了,如果我需要格式化输出怎么办呢? 总不能啥东西都有echo 打字符串吧?
没问题啊,shell 提供了原生的格式化打印命令printf。
下面来看如下脚本,比上面那个echo 略复杂一点儿:
然后我们来解释一下,上面的代码的含义。
printf 是我们的格式化打印的关键字,后面跟着一串格式化字符串。
printf "%-5s %-10s %-4s\n" NO NAME Marks
# 我们就拿第一行举例子说明一下。
# 每个格式化项都以%开头,其中的 -
# 代表左对齐,后面跟的5代表对齐的
# 字符长度,后面跟着的s 代表后面是
# 字符串类型
s 代表字符串,f 代表浮点类型,d代表整数类型等
总结:
%-4.2f 就是代表打印项类型是浮点,小数点保留2位,四个字符对齐
上面的脚本执行结果如下:
好的,今天就先到这里了,由于是第0期,主要是给大家介绍下shell 脚本的背景知识和简单打印,从下一期开始,给大家介绍如何使用shell 脚本中的变量,以及变量定义,变量的其它高级用法。
这会是一整个系列,如果大家感兴趣的话,不妨关注一下,后期会按时给大家更新内容,以及我们在真实工作中的使用案例。