目录

(一)运维是什么?

(二)什么是 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

自动化运维:(1)认识 Shell的更多相关文章

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

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

  2. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

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

    项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery ...

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

    Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装 ...

  5. SQL Server 自动化运维系列

    本系列为SQL SERVER自动化运维的一些操作技巧点,所有内容都是根据日常运维过程中最经常遇到的问题,并为此形成了一些自动化运维的方式,皆为原创.... 供部分DBA和开发人员浏览借鉴,所应用平台基 ...

  6. CheungSSH国产自动化运维工具开源Web界面

    CheungSSH web2.0 发布文档 CheungSSH 简介 CheungSSH是一款国人自主研发的Linux运维自动化管理服务器软件,秉着为企业降低运营成本,解放管理员双手和自动化生产的理念 ...

  7. 自动化运维工具ansible部署以及使用

    测试环境master 192.168.16.74webserver1 192.168.16.70webserver2 192.168.16.72安装ansiblerpm -Uvh http://ftp ...

  8. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  9. (转)mongodb常用命令脚本化-自动化运维

    mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护   1 设置副本集   #!/bin/bash#mongodb 进入client ...

随机推荐

  1. 【Android-PopupMenu控件】 自定义标题栏+PopupMenu菜单

    效果图 1.布局文件 layout_main.xml 中间标题栏,左右各一个按钮. <LinearLayout xmlns:android="http://schemas.androi ...

  2. Java数据库小项目02--管家婆项目

    目录 项目要求 开发环境搭建 工具类JDBCUtils 创建管家婆数据表 项目分层 MainApp层 MainView层 ZhangWuController层 ZhangWuService层 Zhan ...

  3. switch语句分析

    1.关于switch语句 如果if语句中表达式是判断是否等于一个常量时,可以用switch语句来代替 if(表达式 == 常量1)                        {          ...

  4. Luogu P4398 [JSOI2008]Blue Mary的战役地图 矩阵哈希

    其实可以二分矩阵边长但是我太懒了$qwq$. 把每个子矩阵扔到$map$里,然后就没了 #include<cstdio> #include<map> #include<i ...

  5. 下载PDF格式的Html

    下载PDF格式的Html 首先准备需要的两个js jsPdf.debug.js html2canvas.js 直接上代码: function download() { html2canvas(docu ...

  6. vim.rc配置(deepin)

    set nocompatible " be iMproved, requiredfiletype off " required " set the runtime pat ...

  7. Flask-配置参数

    Flask配置 Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示 ...

  8. Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)

    Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...

  9. KDC添加加密

    零售KDC管理的域为TESTA.COM 华为集群管理的域为hadoop.com (目前测试了hdfs cli,下午在UAT集群测试下distcp) 一.            零售KDC升级支持AES ...

  10. java将PDF的前几页拆出来组成新pdf

    /** * 截取pdfFile的第from页至第end页,组成一个新的文件名 * @param pdfFile 需要分割的PDF * @param savepath 新PDF * @param fro ...