自动化运维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/profileshell内置变量
可以直接拿过来使用实现某种具体的功能
$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,默认不写为1bash 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不一一列举了
awk命令
awk [参数] '[动作]' [文件名]
参数
-F指定分隔符号,默认为空格-v设置变量-f指定运行的awk脚本动作
print显示内容$0显示所有行列内容$n显示当前行第n列内容常见内置变量
FILENAME当前输入文件的文件名,该变量是只读的NR指定显示行的行号NF输出最后一列的内容OFS输出格式的列分隔符,缺省是空格FS输入文件的列分融符,缺省是连续的空格和Tab基本用法
一段文本:cat log.txt
2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongoawk ‘{[pattern] action}’ {filenames}
# 行匹配语句 awk ” 只能用单引号实例:
# 每行按空格或TAB分割(默认情况),输出文本中的1、4项
$ awk '{print $1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
---------------------------------------------
# 正则格式化输出
$ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
---------------------------------------------
2 a
3 like
This's
10 orange,apple,mongo
----------------------------------------------
$ awk '{print FILENAME} log.txt'
-----------------------------------------------
log.txt
log.txt
log.txt
log.txtawk -F
#-F相当于内置变量FS, 指定分割字符实例:
$ awk -F, '{print $1,$2}' log.txt
---------------------------------------------
2 this
3 Are you like awk
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
$ awk -F '[ ,]' '{print $1,$2,$5}' log.txt
---------------------------------------------
2 this
3 Areawk -v #设置变量
实例:
$ awk -va=1 '{print $1,$1+a}' log.txt
---------------------------------------------
2 3
3 4
This's 1
10 11
$ awk -va=1 '{print $1,$(1+a)}' log.txt
---------------------------------------------
2 this
3 Are
This's a
10 There
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
---------------------------------------------
2 3 2s
3 4 3s
This's 1 This'ss
10 11 10s流程控制语句
语法格式
if [ 条件]
then
指令
elif [ 条件2 ]
then
指令
else
指令
ficase选择语句
read -p "输入性别
循环语句
for循环
实例:
#将当前文件夹下的所有文件拷贝到bak
for file in $(ls)
do
echo "文件:$file"
cp "$file" bak/"${file}-baK"
donewhile循环
count =0
while [ $count -le 5]
do
echo "count: $count"
let count=count+1
done函数/方法
函数名(){
函数体
}实例
echo "文件名:$0 参数个数:$# 第一个参数:$1"
hanshu(){
echo "这是一个函数"
}
echo "文件名:$0 参数个数:$# 第一个参数:$1"
hanshu z x c#调用
--------------------------------------------------------------------
bash xxx.sh a s d#运行上面这些脚本
---------------------------------------------------------------------
文件名:xxx.sh 参数个数:3 第一个参数:a
文件名:xxx.sh 参数个数:3 第一个参数:z
自动化运维Shell入门的更多相关文章
- saltstack自动化运维快速入门
saltstack自动化运维快速入门 关于saltstack 这个软件是干啥的 我这里就不介绍了 只是简单的说下是干啥的 网上的说法是 它是func的强化版本+ puppet的精简版 关于puppet ...
- 自动化运维-ansible入门篇
1.ansible配置 什么是Ansible IT自动化工具 依赖于现有的操作系统凭证来访问控制远程机器 简单易用.安全可靠 Ansible可以完成哪些任务 配置系统 开发软件 编排高级的IT任务 A ...
- [Linux]Ansible自动化运维① - 入门知识
目录 一.Ansible 概述 1.1 Ansible 是什么 1.2 Ansible 优势 1.3 Ansible 特性 二.Ansible 入门 2.1 Ansible 架构 2.2 Ansibl ...
- 自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)
项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery ...
- 简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环)
简单的自动化运维工具(shell+except+whiptail+功能模块化函数+循环) http://www.cnblogs.com/M18-BlankBox/p/5881700.html
- 自动化运维:(1)认识 Shell
目录 (一)运维是什么? (二)什么是 Shell? (三)Shell的分类 (四)Shell脚本 (五)Shell的变量 (六)表达式 (七)Linux常见符号 (八)常见命令 (一)自动化运维是什 ...
- Linux Shell交互式自动化运维程序
Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装 ...
- 自动化运维工具之Puppet基础入门
一.简介 puppet是什么?它能做什么? puppet是一个IT基础设施自动化运维工具,它能够帮助系统管理员管理基础设施的整个生命周期:比如,安装服务,提供配置文件,启动服务等等一系列操作:基于pu ...
- Linux运维工程师入门的10大实用工具
说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入门就基本没问题了. 工具如下: 1.Linux系统基础 这个不用说了,是基础中的基础,连这 ...
随机推荐
- DNS 放大
DNS放大攻击是伪造一个DNS查询的报文,源地址改成想要攻击的IP.单个查询的包64字节,如果是ANY类型查询(或者DNSSEC记录),那么回复报文一般会大几十倍.当然,如果攻击者自己制造一个很大的T ...
- [fw]谈EXPORT_SYMBOL使用
EXPORT_SYMBOL只出现在2.6内核中,在2.4内核默认的非static 函数和变量都会自动导入到kernel 空间的, 都不用EXPORT_SYMBOL() 做标记的.2.6就必须用EXPO ...
- 63.Perfect Squares(完美平方数)
Level: Medium 题目描述: Given a positive integer n, find the least number of perfect square numbers (f ...
- 大哥带我走渗透4(中)----oracle报错注入
5/30 报错注入 0x01 准备阶段 1. 基础知识今天了解了,但是,只能看懂和最基本的理解,不能自己上路.所以,还是要不停学习基础.并且及时总结.这有一篇很详细的文章:https://www.cn ...
- docker 安装nexus
1.查找镜像 docker search nexus 2.拉取镜像 docker pull sonatype/nexus3 3.启动容器 docker run -d -p 8081:8081 -p 8 ...
- 二、sqlyog的使用
1. 创建数据库. 注意字符集 2.创建表 注意 表名.引擎名.字符集
- h5py库
参考文献:http://docs.h5py.org/en/latest/high/dataset.html h5py文件存放数据集(dataset)和组(group). dataset类似数组类的数据 ...
- 关于使用html2canvas 绘制图片的坑
html2canvas绘制跨域图片之后,会导致画布被污染,从而无法使用canvas的toDateUrl()等方法获取图片数据的方法,这是canvas的限制而并非html2canvas的原因.好了锅甩好 ...
- Kubernetes v1.16 对API的更改
前段时间安装Kubernetes v1.16.2,然后从v1.14版本的拷贝yaml文件过来执行,很多都报没有相应的api,查看一下新版本的api admissionregistration.k8s. ...
- 饿了么 <el-input></el-input>输入框获取与失去焦点事件
//1.定义focus事,绑定属性 <el-input v-model="headerInput" @focus="onInputFocus" @blur ...