自动化运维:(1)认识 Shell

目录

(一)运维是什么?

(二)什么是 Shell?

(三)Shell的分类

(四)Shell脚本

(五)Shell的变量

(六)表达式

(七)Linux常见符号

(八)常见命令

(一)自动化运维是什么?

  现在有成百上千台服务器的集群需要你部署,你需要登录所有的服务器,对每一台服务器都进行相同的设置。请问你如何完成这项工作?你需要自动化运维。

  自动化运维是使用工具和脚本等手段,对企业 it 项目的规划、管理、流程规范、平台、监控、告警、安全、优化、考核等流程实现自动化批量运作。

(二)什么是 Shell?

  首先,Shell是一个程序——命令解释器。

  Shell是将系统内核、程序和用户连接了起来。在终端输入的命令,是Shell把它翻译给操作系统内核,然后将操作指令系统处理后的结果解释给应用程序。

  其次,Shell又是一类编程语言——既是一种命令语言,又是一种程序设计语言。shell是在操作系统和用户之间的一个命令翻译工具,你可以用shell语言编写不需要进行编译的就可以执行的脚本程序。所谓shell编程是无须编译即可执行的命令组织在一起,加上一定的逻辑结构的判断来实现自身功能化——虽然没有 C/C++、Java、Python 等强大,但也支持了基本的编程元素——用来开发一些实用的、自动化的小工具足够了。

  总而言之,Shell 也是一种编程语言,它的编译器(解释器)是 Shell 这个程序。

  常见的 Shell 有 sh、bash( Linux 的默认)、csh、tcsh、ash 等 

(三)Shell的作用

  Shell 除了能解释用户输入的命令,将它传递给操作系统内核,还可以:

  • 调用其他程序,给其他程序传递数据或参数,并获取程序的处理结果;
  • 在多个程序之间传递数据,把一个程序的输出作为另一个程序的输入;
  • Shell 本身也可以被其他程序调用。

   Shell 的功能非常强大,完全能够胜任 Linux 的日常管理工作,如文本或字符串检索、文件的查找或创建、大规模软件的自动部署、更改系统设置、监控服务器性能、发送报警邮件、抓取网页内容、压缩文件等。

(四)Shell脚本

  Shell 就是一种脚本语言,我们编写完源码后不用编译,直接运行源码即可。

创建:

  test.sh文件:

#!/bin/bash
echo "Hello World !"

shell执行的方式:

  将上面的代码保存为test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

bash /path/to/script-name   或  /bin/bash /path/to/script-name  (推荐使用

/path/to/script-name        或  ./script-name   (当前路径下执行脚本)

source script-name          或  . script-name   (注意“.“点号)

说明:

1、脚本文件本身没有可执行权限或者脚本首行没有命令解释器时使用的方法,我们推荐用bash执行。

2、脚本文件具有可执行权限时使用。

3、使用source或者.点号,加载shell脚本文件内容,使shell脚本内容环境和当前用户环境一致。

  

开发规范:

1、脚本命名要有意义,文件后缀是.sh
2、脚本文件首行是而且必须是脚本解释器
#!/bin/bash
3、脚本文件解释器后面要有脚本的基本信息等内容
脚本文件中尽量不用中文注释;
          尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰
常见的注释信息:脚本名称、脚本功能描述、脚本版本、脚本作者、联系方式等
4、脚本文件常见执行方式:bash 脚本名
5、脚本内容执行:从上到下,依次执行
6、代码书写优秀习惯;
    1)成对内容的一次性写出来,防止遗漏。
如:()、{}、[]、''、``、""
    2)[]中括号两端要有空格,书写时即可留出空格[    ],然后再退格书写内容。
    3)流程控制语句一次性书写完,再添加内容
7、通过缩进让代码易读;(即该有空格的地方就要有空格)

(五)shell的变量

普通变量的定义方式:

variable=value    # 变量值必须是一个整体,中间没有特殊字符    
variable='value'        # 我看到的内容,我就输出什么内容
variable="value"    # 如果变量值范围内,有可以解析的变量A,那么首先解析变量A,将A的结果和其他内容组合成一个整体,重新赋值给变量B

# 数字不加引号,其他默认加双引号

使用变量:

定义方式一:
变量名=`命令`    # ` 是反引号

定义方式二:
变量名=$(命令)
    
执行流程:
    1、执行`或者$()范围内的命令
    2、将命令执行后的结果,赋值给新的变量名A

修改变量的值:

# 已定义的变量,可以被重新赋值,如:
url="http://c.biancheng.net"
echo ${url}
url="http://c.biancheng.net/cpp/shell/"
echo ${url}

查看变量:

方式一:
        $变量名
        场景:
            私下里,在命令行/脚本中使用
            图省事
方式二:
        "$变量名"
        场景:
            私下里,在命令行/脚本中使用
            图省事
方式三:
        ${变量名}
        场景:
            echo " dsa  dsafsa  dsafsa ${变量名} f "
使用频率较高
方式四:
        "${变量名}"
        场景:
            标准使用方式

将命令的结果赋值给变量:

variable=`command`
variable=$(command)

删除变量:

unset 变量名

运行shell时,会同时存在三种变量:

1) 局部变量

  局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

2) 环境变量

  所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

3) shell变量

  shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

(六)表达式

要使Shell脚本程序具备一定的“逻辑能力”,面临的第一个问题就是:区分不同的情况以确定执行何种操作,下面我们就来学习解决这个问题---测试语句.

测试语句:

A: test 条件表达式    # 不常用
B: [ 条件表达式 ]    # 注意必须有空格

# 条件成立,状态返回值是0
#条件不成立,状态返回值是1

条件表达式:

  • 罗辑表达式:

逻辑表达式一般用于判断多个条件之间的依赖关系。

常见的逻辑表达式有:    &&  和  ||

命令1  &&  命令2
# 如果命令1执行成功,那么我才执行命令2
# 如果命令1执行失败,那么命令2也不执行


命令1 || 命令2
# 如果命令1执行成功,那么命令2不执行
# 如果命令1执行失败,那么命令2执行
  • 文件表达式:

-f
-d
-x
  • 数值操作符:

n1 -eq n2            相等
n1 -gt n2            大于
n1 -lt n2            小于
n1 -ne n2            不等于
  • 字符串比较:

str1 == str2            str1和str2字符串内容一致
str1 != str2            str1和str2字符串内容不一致,!表示相反的意思

计算表达式:

计算表达式,简单来说就是对具体的内容进行算数计算

方式一:
$(())          $(( 计算表达式 ))
方式二:
let                let 计算表达式

注意:
$(())中只能用+-*/和()运算符,并且只能做整数运算

(七)Linux常见符号

重定向符号

>  # 表示将符号左侧的内容,以覆盖的方式输入到右侧文件中
>>  # 表示将符号左侧的内容,以追加的方式输入到右侧文件的末尾行中

管道符 |

| 这个就是管道符,传递信息使用的


使用:
命令1 | 命令2
管道符左侧命令1 执行后的结果,传递给管道符右侧的命令2使用

其他符号

后台展示符号 &         
# 就是将一个命令从前台转到后台执行

全部信息符号 2>&1         
 #符号详解:
# 1 表示正确输出的信息
# 2 表示错误输出的信息
# 2>&1 代表所有输出的信息


linux系统垃圾桶 
# /dev/null 是linux下的一个设备文件,
# 这个文件类似于一个垃圾桶,特点是:容量无限大

(八)常见命令

grep    # grep命令是我们常用的一个强大的文本搜索命令。
sed    # sed 行文件编辑工具。因为它编辑文件是以行为单位的。
awk    # awk是一个功能非常强大的文档编辑工具,它不仅能以行为单位还能以列为单位处理文件。
find    # find [路径] [参数] [关键字]

参考:语言中文网 http://c.biancheng.net/cpp/view/6994.html

原文地址:https://www.cnblogs.com/mzfly/p/9970210.html