自动化运维Shell入门

运维shell

作用

项目部署 项目监控

什么是shell

shell是一个程序,/bin/bash/,是一个命令解释器所有linux命令都由他来执行,打开终端就进入了 shell的交互式命令

运行方式

  • bash *.sh
  • 更改可执行权限后使用./*.sh来执行
  • shource *.sh

语法

  • 没有缩进要求,缩进是没有意义的
  • 注释使用#
  • 双引号""内嵌入变量是解释变量
  • 单引号‘‘内写什么,就是什么,不会解释变量
  • shource不会开启新的进程来执行脚本,可以跟当前窗口共享进程,以及变量所以变量可以使用普通变量
  • 反引号&&$() 内嵌命令将命令执行之后的结果写进变量
  • 变量的使用
     # 设 变量名为 name 且有值 调取变量方式如下 echo $name echo ${name) echo "$name" echo "${name}" #规范写法
  • 测试语句(判断)

    利用text[]来结合内置变量$?来进行判断语句

     #方法1 text 2 = 2 # 条件前后必须加空格 $? #方法2 [ 1 = 2 ] # `[]`内前后追加空格 $?

$?结果0为真 1为假

变量

  • 本地变量

    在当前系统的某个环境下生效的变量作用范围小

    • 普通变量

      只在当前命令窗口环境下才可以调用

     name=langwang  # 注意的是shell脚本是没有pep8的代码风格要求所以不需要加任何空格,加空格就会报错 echo $name # $变量名 来使用本地变量,变量是没有类型的而且不能加入空格 # 变量默认值   # a=1 echo ${a-123} # 变量a如果有内容,那么就输出a的变量值 # 变量a如果没有内容,那么就输出默认的内容,也就是123 b=18 echo ${b+22} #无论变量a是否有内容,都输出默认值,也就是22
  • 命令变量
 ml=`pwd` # 只是在当前环境下执行命令(给命令起了一个别名) ml=$(pwd) #与上写法想同
  • 全局变量

    当前shell以及其派生出来的子shell中都有效的变量。

    在当前以及子进程shell窗口都能加载全局变量

     env #查看全局变量 name=xiao export name echo $name # 简写形式 export age=112

    任何窗口下都可以使用的变量,全局变量永久有效

     sudo vim /etc/profile  #将变量写入这个文件即可实现在全局使用 source /etc/profile
  • shell内置变量

    可以直接拿过来使用实现某种具体的功能

     $0  # 获取当前shell脚本文件名 ${n}  # 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9就要用大括号括起来${10} $#  # 获取当前shell命令行中参数的总个数 $?  # 获取执行上一个指令的返回值(0为成功,非0为失败)

字符串操作

  • 精确截取
 file=‘hello world‘ ${file:0:5}     # 从第1个字符开始,截取5个字符 ${file::5}      # 从第1个字符开始,截取5个字符 ${file:5:5}     # 从第6个字符开始,截取5个字符 ${file:5}       # 从第6个字符开始,截取后面所有的字符 ${file:0-5}     # 从倒数第5个字符开始,截取后面所有的字符 ${file:0-6:3}   # 从倒数第6个字符开始,截取之后的3个字符

条件表达式

&& :且,命令1 && 命令2 命令1执行成功才会执行命令2 如果命令1 失败 则命令2不会执行

||: 或,命令1 || 命令2 如果命令1执行成功,那么命令2不执行 如果命令1执行失败,那么命令2执行

  • 文件运算符

-f 判断是否是一个文件

-d判断是否为一个文件夹(目录)

-e判断文件或者目录是否存在

-x判断是否可执行

-r判断文件可读权限

-w判断文件可写权限

  • 字符串比较运算符

-z string 如果 string长度为零,则为真

-nstring 如果string 长度不为零,则为真

string1= string2 如果 string1与 string2相同,则为真

string1 != string2 如果 string1与 string2不同,则为真

  • 算术比较运算符

-eq等于

-ne不等于

-lt小于

-le小于等于

-gt大于

-ge大于等于

  • 计算表达式

$(())双括号内放计算表达式,只能加减乘除的整数运算

let表达式必须是一个整体,中间不能出现空格等特殊字符

 age=10 echo $((age-8)) 2 i=2 let i=age-i echo $i 8

常见符号

  • 重定向符号

    • >覆盖右侧 文件内容

       ls > a.txt #将ls输出结果覆盖写入a.txt
    • >>追加到右侧文件内容
     ls -alh >> a.txt  # 将文件输出结果追加写入

    只把正确结果写入,如果想要把错误结果写入在>前加2,默认不写为1

     bash xxx.sh 1> ak.txt 2> err.txt bash xxx.sh 1> a.text > &1  #正确错误都写入a.text
  • 管道符
    • |

      命令1 | 命令2

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

  • 其他
    • 后台展示符号 &

      就是将一个命令从前台转到后台执行

      引用

       ping www.baidu.com & ping www.baidu.com > /edv/null 2>&1 & #  正确错误的结果都丢进垃圾桶 
  • 常用命令
    • grep

      • grep [参数] <文件名> [-r]#文件目录要加-r

         grep -n aa xxx.txt # 查找txt文件中的aa 并显示行号 -n #显示行号 -i #忽略大小写 -v #不包含文件的所有行
    • find
      • find [路径] [参数] [关键字]

         -name # 查找文件名 -type # 查找文件类型 下面是支持的常见文件类型 -b # 块设备文件 -d # 目录 -c # 字符设备文件 -p # 管道文件 -l # 符号链接文件 -f # 普通文件

      sed命令

      • 行文件编辑工具

      sed [参数] 条件 [动作] [文件名]

      参数 参数为空 表示显示更改效果,不对文件进行编辑 -i 表示对文件进行编辑更改不会显示效果 条件 ‘/关键字/‘ 隔离符号可以为#``@``!根据具体情况进行使用 动作 a 匹配内容下一行增加内容 i 匹配内容上一行增加内容 d 删除匹配内容 s 替换匹配内容 *以上的动作 必须在-i参数下使用

      # 假设有文件123.txt其内容为   # hello sed sed sed    # hello sed sed sed    sed "s#sed#SED#" 123.txt # 每一行匹配的第一个小写替换为大写,只是对修改进行展示,并不会对文件进行修改   # 输出为   # hello SED sed sed   # hello SED sed sed   sed "s#sed#SED#g" 123.txt # 匹配的小写全部替换为大写,只是对修改进行展示,并不会对文件进行修改   # 输出为   # hello SED SED SED   # hello SED SED SED   sed "1s#sed#SED#" 123.txt # 对第一行第一个匹配的小写sed替换为大写,只是对修改进行展示,并不会对文件进行修改   # 输出为   # hello SED sed sed   # hello sed sed sed     sed "2s#sed#SED#2" 123.txt # 对第二行第二个匹配的小写替换为大写,只是对修改进行展示,并不会对文件进行修改   # 输出为   # hello SED SED SED   # hello SED SED SED   sed "a#hello" 123.txt # 对所有行进行增加,对修改进行展示,并不会对文件进行修改   # 输出为   #hello sed sed sed   #hello   #hello sed sed sed   #hello   sed "2a#hello2" 123.txt # 对所有行进行增加,对修改进行展示,并不会对文件进行修改   # 输出为   #hello sed sed sed   #hello2   #hello   #hello sed sed sed   #hello

    不一一列举了

  • 未完待更新

原文地址:https://www.cnblogs.com/kali404/p/11745256.html

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

自动化运维Shell入门的相关文章

小型自动化运维--expect入门知识

小型自动化运维--expect入门知识 Expect的自动交互工作流程简单说明: spawn启动指定进程-->expect获取期待的关键字-->send向指定进程发送指定字符-->进程执行完毕,退出脚本. spawn命令 如果没有spawn命令,expect程序将会无法实现自动交互. spawn命令的语法为: spawn [选项] [需要自动交互的命令或程序] 例如:spawn ssh [email protected] uptime 说明:在spawn命令的后面,直接加上要执行的命令或

自动化运维 Shell

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

Python自动化运维Django入门

随着IT运维技术日益更新,近几年运维自动化越来越火,而且学习python的人非常的火爆,尤其是python自动化运维开发,得到了很多前辈的推崇,尤其是老男孩培训中心.老男孩老师.Alex老师等,在这里非常感谢你们. 这里我也记录一下以前学习Django的一点点心得和方法,方便以后自己查阅,如果能帮助初学者是最好的了!好的,其他不多说了,博文滴走起. 一.系统实战环境 系统版本:CnetOS6.5 x86_64 Django版本:Django-1.5.8 MySQL版本:MySQL-5.1.73

自动化运维—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

自动化运维工具之ansible基础入门

自动化运维工具常用的有 ansible  saltstack  puppet等 ,前两者都是基于python开发,puppet基于ruby开发,今天我们简单介绍下ansible基础 一.基础知识: 1. 简介 ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的 (1) host inventory: 指定操作的主机,是一个配置文件里面定义监控的主机        (2) 各种模块核心模块.comman

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

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