自动化运维:认识 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

时间: 2024-10-07 03:46:38

自动化运维:认识 shell的相关文章

自动化运维-使用Shell脚本简单实现

回顾: 1   安装etcd [[email protected] ~]# pip install python-etcd                                                       安装etcd软件 2   修改salt-master的配置文件,加配置,并重新启动salt-master [[email protected] ~]# vim /etc/salt/master etcd_pillar_config: etcd.host: 10.0.0

自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)

项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery bootstrap 脚本:shell 适用系统:redhat5.8/redhat6.6 平台已实现功能: 中间件和数据库软件的启停和状态检查 (tomcat,nginx,apache,oracle,mysql) 完整功能设计图: 效果图: 架构图(简要): 项目源码:https://github.c

shell + ansible + gateone 自动化运维管理

目的: shell + ansible + gateone 自动化运维管理:最少的人工干预下,结合运用脚本与第三方工具,保证业务系统7*24小时高效稳定运行: 1.安装环境涉及软件 本次操作系统:Centos 6.5 32/64 进行测试 项目安装软件 版本 Python 2.6.6 Tornado 2.4.1 2.环境部署 2.1 安装依赖包 yum install -y python python-pip gcc python-devel setuptool python-pam opens

手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台

在做手游运维工作之前,我接触的代码发布都是常规的软件发布,有固定的发布周期.之前工作的那个外企有严格的发布周期,一年中的所有发布计划都是由Release Manager来控制,每次发布之前都需要做一些准备工作,如填写发布表单,上传发布需要的资源文件,联系发布过程中的相关人员,如开发和测试.最后在公司内部开发的发布平台上按照指定的时间点击鼠标对一个集群内的几台主机或全部主机进行代码发布.这个发布平台还是基于rsync服务实现的.虽然每个星期都有各种服务的发布,但是整个发布流程是可以控制的,并且发布

简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环)

简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环) http://www.cnblogs.com/M18-BlankBox/p/5881700.html

自动化运维 Shell

下面是我多年整理并使用多少的Shell 分享给大家.说起自动化运维很多人会谈到 puppet, ansible,saltstack 这些工具我都使用了,最终都放弃了.这些工具前期配置太耗时间,扩展也不方便,适合傻瓜化运维,对于有15年软件开发经验的我更喜欢,自由,随心所欲.最终我选择了自行维护 shell , 将shell 模块化,根据需要组合. github 地址 :  https://github.com/oscm/shell 下面举例,安装一个web 服务器. curl -s https:

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

Linux Shell交互式自动化运维程序

Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装,也可以通过网络借助yum源来安装,yum源安装比较简单:我们下面借助Expect库来实现Linux交互式自动化运维操作,只需要执行脚本就可以实现自动化运维操作,不需要手动输入一些信息按确定,我们可以将交互过程写在一个脚本上,使之自动化完成.我们可以通过expect实现ssh自动登录.ftp自动登录

自动化运维工具之ansible

ansible ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架. 主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定