shell脚本实例

shell编程之Expect免交互

点点圈 提交于 2019-12-04 23:55:51
shell编程之Expect免交互 一、前言 ​ shell脚本存在的核心意义就在于基于shell命令简化甚至省略可避免的人工操作,通过各种控制流程结构以及正则表达式等方法,逐步实现自动化操作的整个过程,由此也可见,shell并没有面向对象的思想,类似C语言,毕竟C语言是操作系统或者说是内核的核心语言。 ​ 所以,语言并无优劣之分,只是每个人使用的习惯与方式不同,换句话说,难易的不是语言,而是思想与突如其来的灵感。 二、Expect概述与安装 Expect概述 ​ Expect是建立在TCL基础上的一个工具,Expect是用来进行自动化控制和测试的工具。主要解决shell脚本中不可交互的问题。对于大规模的Linux运维很有帮助。 ​ 在Linux运维和开发中,我们经常需要远程登录服务器进行操作,登录的过程是一个交互过程,需要输入yes/no password等信息。为了模拟这种输入,可以使用Expect脚本。 Expect的安装:yum install -y expect 三、基本命令 send:向进程发送字符串,用于模拟用户的输入,但不支持换行 一般需要加上 \r expect:内部命令 ​ 判断上次输出结果里是否包含指定的字符串,有则返回,反之就等待超时时间后返回。 ​ 只能捕捉由spawn启动的进程的输出。 spawn:启动进程,并跟踪后续交互信息。 interact

shell脚本中的双括号用法

僤鯓⒐⒋嵵緔 提交于 2019-12-04 23:24:13
在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算。估计很多朋友都感觉比较难以接受。特变逻辑运算符”[]”使用时候,必须保证运算符与算数 之间有空格。 四则运算也只能借助:let,expr等命令完成。 今天讲的双括号”(())”结构语句,就是对shell中算数及赋值运算的扩展。 使用方法: 语法: ((表达式1,表达式2…)) 特点: 1、在双括号结构中,所有表达式可以 像c语言一样 ,如:a++,b--等。 2、在双括号结构中,所有变量可以不加入:“$”符号前缀。 3、双括号可以进行逻辑运算,四则运算 4、双括号结构 扩展了for,while,if条件测试运算 5、支持多个表达式运算,各个表达式之间用“,”分开 使用实例: 扩展四则运算 1 2 3 4 5 6 7 8 9 10 11 #!/bin/sh a=1; b=2; c=3; ((a=a+1)); echo $a; a=$((a+1,b++,c++)); echo $a,$b,$c 运行结果: sh testsh.sh 2 3,3,4 双括号结构之间支持多个表达式,然后加减乘除等c语言常用运算符都支持。如果双括号带:$,将获得表达式值,赋值给左边变量。 扩展逻辑运算 1 2 3 4 5 6 7 8 9 10 #!/bin/sh a=1; b= "ab" ; echo $((a>1?8:9)); (

shell编程之正则表达式(二)sed工具

笑着哭i 提交于 2019-12-04 19:08:27
sed 工具 sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用于 Shell 脚本中,用以完成各种自动化处理任务。 sed 的工作流程主要包括读取、执行和显示三个过程。 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓 冲区中(又称模式空间,pattern space)。 执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。 显示:发送修改后的内容到输出流。再发送数据后,模式空间将会被清空。 在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。 注意:默认情况下,所有的 sed 命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。 1.sed 命令常见用法 通常情况下调用 sed 命令有两种格式,如下所示。其中,“参数”是指操作的目标文件,当存在多个操作对象时用,文件之间用逗号“,”分隔;而 scriptfile 表示脚本文件,需要用“-f”选项指定,当脚本文件出现在目标文件之前时

Shell

北战南征 提交于 2019-12-04 18:20:39
一、 Shell 1. Shell 简介 1. Shell 是一个用 C 语言编写的程序,它既是一种命令语言,又是一种程序设计语言,它是用户使用 Linux 的桥梁2. Shell 脚本(Shell Script),是一种为 Shell 编写的脚本程序3. 用户开发的 Shell 脚本可以驻留在命令搜索路径的目录之下(通常是 /bin、/usr/bin 等),像普通命令一样使用。如果打算反复使用编好的 Shell 脚本,可以开发出自己的新命令4. Linux 的 Shell 种类众多,常见的有: 1)Bourne Shell(/usr/bin/sh 或 /bin/sh) 2)Bourne Again Shell(/bin/bash) 3)Shell for Root(/sbin/sh) ....5. 本文关注的是 Bash,也就是 Bourne Again Shell 1)由于易用和免费,Bash 在日常工作中被广泛使用 2)Bash 也是大多数 Linux 系统默认的 Shell 3)一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以 #!/bin/sh 也可以写为 #!/bin/bash,#! 是一个约定的标记,其路径告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell6. Shell 脚本的编写 1)使用 vi/vim

shell编程之case语句与循环语句

旧城冷巷雨未停 提交于 2019-12-04 18:08:35
case多分支语句 case语句结构:针对变量的不同取值,分别执行不同的命令序列 case 变量值 in 模式1) 命令序列1 ;; 模式2) 命令序列2 ;; *) 默认命令序列 esac “ ;;”表示一句话的结束 “if,else”语句适用于一个区间范围 “case‘语句适用于匹配某一个固定值 case语句运用实例: 1.判断输入的字符是数字、字母还是符号 2.判断输入成绩的优良差 循环语句 for语句的结构:读取不同的变量值,用来逐个执行同一组命令 for 变量名 in 取值列表 do 命令序列 done 从取值列表中自上而下取一个值赋值给变量,再进行输出 for语句运用实例 1.批量添加用户 用户名存放在users.txt文件中,每行一个 初始密码均设为123456 验证脚本 2.使用ping命令查看与各主机的连通性 将结果保存到shuju.txt while语句的结构:重复测试某个条件,只要条件成立则反复执行 while 条件测试操作 do 命令序列 done while语句运用实例: 1.批量添加用户 用户名称以stu开头,按数字顺序进行编号 一共添加20个用户,即stu1、 stu2、…、stu20 初始密码均设为123456 until语句的结构:重复测试某个条件,只要条件不成立则反复执行 until 条件测试操作 do 命令序列 done

shell脚本编程

跟風遠走 提交于 2019-12-04 17:57:26
Shell 脚本,是一种为 shell 编写的脚本程序。 Shell echo命令 使用echo可以实现更复杂的输出格式控制。 1.显示普通字符串: echo "It is a test" 这里的双引号完全可以省略,以下命令与上面实例效果一致: echo It is a test 2.显示转义字符 echo "\"It is a test\"" 结果将是: "It is a test" 同样,双引号也可以省略 3.显示变量 read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量 #!/bin/sh read name echo "$name It is a test" 以上代码保存为 test.sh,name 接收标准输入的变量,结果将是: [root@www ~]# sh test.sh OK #标准输入 OK It is a test #输出 4.显示换行 echo -e "OK! \n" # -e 开启转义 echo "It is a test" 输出结果: OK! It is a test 5.显示不换行 #!/bin/sh echo -e "OK! \c" # -e 开启转义 \c 不换行 echo "It is a test" 输出结果: OK! It is a test 6.显示结果定向至文件 echo "It is a test" >

shell脚本编程

谁说胖子不能爱 提交于 2019-12-04 17:52:32
shell有两种执行命令的方式: 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。 我们要知道bash和sh不是一个东西,我们需要了解,bash完全兼容sh,也就是说,用sh写的脚本可以不加修改的在bash中执行。 终端输入 vi test.sh 开始编辑输入一下内容: echo "Hi, SB" read PERSON echo "$PERSON, ni shi hou zi pai lai de dou bi ma ?" 输入完毕后,按Esc,然后输入 wq,按enter 好了已经保存并且退出了。(以上步骤如果还不够熟练,建议你换个姿势~再来一次并且明白每个步骤的作用) 接着运行,运行的话有好几种方式,这里用俩种吧 第一种,输入 ./test.sh(注意!前面有个点,表示当前目录下) 第二种,输入 sh test.sh (当然bash test.sh也可以啦,前面说了bash对sh兼容是很好的,当然我这里不是看敲sh方便嘛,就俩个字符。(尼玛!多敲俩个字符能死。。)) 好了,看看结果。咦?怎么不对。。。 Linux有个权限系统,我们这样创建的文件是没有执行权限的

Shell脚本编程

倾然丶 夕夏残阳落幕 提交于 2019-12-04 04:09:00
Shell 脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序。 业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。 由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。 Shell 环境 Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。 Linux 的 Shell 种类众多,常见的有: Bourne Shell(/usr/bin/sh或/bin/sh) Bourne Again Shell(/bin/bash) C Shell(/usr/bin/csh) K Shell(/usr/bin/ksh) Shell for Root(/sbin/sh) …… 本教程关注的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。 在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh ,它同样也可以改为 #!/bin/bash 。 #!

Shell 学习(二)

▼魔方 西西 提交于 2019-12-03 17:53:24
目录 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1.2 实践 2 位置参数变量 2.1 介绍 2.2 基本语法 2.3 位置参数变量应用实例 3 预定义变量 3.1 基本介绍 3.2 基本语法 3.3 应用实例 4 运算符 4.1 基本介绍 4.2 基本语法 5 条件判断 5.1 基本语法 5.2 应用实例 5.3 常用判断条件 5.4 应用实例 Shell 学习(二) 1 设置环境变量 1.1 基本语法 1)export 变量名=变量值 (功能描述:将shell变量输出为环境变量) 2)source 配置文件 (功能描述:让修改后的配置信息立即生效) 3)echo $变量名 (功能描述:查询环境变量的值) 我们来做个测试,在/etc/profile文件里面新增一个环境变量 1.2 实践 1) 在/etc/profile 文件中定义TOMCAT_HOME环境变量 #!/bin/bash #定义一个自己的环境变量 TOMCAT_HOME=/opt/tomcat export TOMCAT_HOME 2)查看环境变量TOMCAT_HOME的值 echo $TOMCAT_HOME 3)在另外一个shell程序中使用TOMCAT_HOME #使用我们自定的环境变量 echo "tomcat_home=$TOMCAT_HOME" #多行注释 用法为 :<<! ! 注意

企业级自动化运维工具应用实战ansible

荒凉一梦 提交于 2019-12-03 17:32:40
公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备。公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运维老大为了在年底有所表现,要求运维部门同学尽快实现,当你接到这个任务时,有没有更快的解决方案? 一、简单介绍 1、定义:   ansible是新出现的自动化运维工具, 基于Python开发 ,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了 批量系统配置、批量程序部署、批量运行命令 等功能。   ansible是基于 paramiko(框架) 开发的,并且基于 模块化 工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible 不需要在远程主机上安装client/agents ,因为它们是 基于ssh 来和远程主机通讯的。ansible目前已经 已经被红帽官方收购 ,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。 2、ansible 特点 1)部署简单, 只需在主控端部署Ansible环境 ,被控端无需做任何操作,没有agent; 2) 默认使用 SSH协议 对设备进行管理; 3) 有大量常规运维操作模块,可实现日常绝大部分操作。 4)