Linux初级运维+系统服务搭建(五)bash条件判断和流编辑器sed基本用法

bash中如何实现条件判断?
条件测试类型:
整数测试
字符测试
文件测试

条件测试表达式(三种方式):
【  expression  】:一个中括号里面两边必须为空格
【【expression】】:两个中括号是bash关键字
test  expression  :采用test命令

整数比较:
-eq:判断两个整数是否相等:比如  $A -eq  $B  返回的两种状态:
执行结果状态:

这里写图片描述
-ne:测试两个整数是否不相等:不等–为真,相等–为假
这里写图片描述
-gt:测试一个数是否大于另外一个数:
-lt:测试一个数是否小于另外一个数:
-ge:大于或者等于
-le:小于或者等于

命令的间逻辑关系:
逻辑与:&&
逻辑或:||
这里写图片描述

注意点 :id  用户名  追缴到黑洞命令
第一个假如该root用户存在  输出helloworld
第二个假如rourou用户不存在则添加用户rourou


变量名称取名字注意点:
只能包含字母数字和下划线。并且不能数字开头


shell中如何进行算术表达式
A=3
B=6
1、let算术运算表达式
let C=$A+$B
2、$[算术运算表达式]
C=$[$A+$B]
3、$((算术运算表达式))
C=$(($A+$B))
4、expr算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用``反点,之间需要空格
C=`expr $A + $B`

单分支条件判断、控制结构
单分支if语句
if 判断条件,then
   statement1
   statement2
fi
双分支的if条件语句
if 判断条件,then
   statement1
   statement2
else
   statement1
   statement2
fi
双分支的if条件语句
if 判断条件,then
   statement1
   statement2
elif
   statement1
   statement2
elif
   statement1
   statement2
else
   statement1
   statement2
fi
exit:退出脚本
命令执行状太结果和执行命令
exit #(0-255)
如果脚本没有明确定义退出状态码,那么最后执行的一条命令的退出码即为脚本退出状态码


文件测试
-e  FILE: 测试该FILE是否存在   -Exit简写
-f FILE :测试文件是否为普通文件
-d  FILE:测试指定文件是否为目录
-r FILE:当前用户对该文件是否有读权限
-w FILE当前用户对该文件是否有写权限
-x  FILE当前用户对该文件是否有执行权限
测试脚本是否有语法错误
bash   -n  脚本
bash   -x   脚本:单步执行



sed基本用法:
sed:    Stream  Editor
只操作文本、逐行编辑---所以称为行编辑器
vi--------------------------------全屏编辑器
每一次将行内容读取到内存中编辑
模式空间---指定哪些行和grep一样处理符合模式条件行放入模式空间假如匹配成功则执行内容
默认情况下不编辑源文件,仅对模式空间中的数据做处理
而后,处理的模式空间的内容显示打印出来
格式:sed  'AddressCommand'  file ......
sed  'AddressCommand'  file ......符合address这个地址的这么多文件执行Command(除了sed其他都是参数)
Address:
1、StartLine ,EndLine(起始和终止)
比如1,100
$:最后一行
2、指定表达式来匹配模式---/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配
4、LineNumber
指定的行
5、StartLine,+N
从startline开始,向后的N行:
Command:
d:删除符合条件的行
p:显示符合条件的行
a : \string,在指定行后面追加新行,内容为string
i:   \string,在指定行前面追加新行,内容为string
r FILE: 将指定的文件的内容添加至符合条件的行处
w FILE:将指定范围内容的内容另存至指定的文件中
s /pattern(查找的模式可以使用正则表达式)/String(查找的模式替换成字符串)/修饰符:查找并替换默认只替换每行中第一次匹配的串
想要替换所有需要加修饰符
g:全局替换
i:忽略字符串大小写
s后面的分割符也可以换成三个相同的###或者@@@但是注意一点不能用的时候是你要查找替换的内容和你的分隔符不能相同
后向引用同grep用法、\(\)  \1, \2
sed 's#1..e#&r#g'  sed.txt-----等同于sed 's#1..e#\lr#g'  sed.txt
&引用模式匹配所有的符合l..e的实际内容 
但是有时候必须用后向引用----例如以下情况
sed 's#l\(..e)#L\1#g' sed.txt  -----该文件内容全局替换小写的l替换成大写的L然后引用的内容只能拿()包住

用法:
d---
sed  '1,2d'  /test/test.txt-------删除该文件第一行到第二行 
sed  '/wolf/d'  /test/test.txt--------删除行内包含wolf的模式
sed  '1,+2d'  /test/test.txt-------删除1后2行
sed '/^\//d' /test/test.txt-------删除带斜线的需要转义

p---
sed -n(-n静默模式,不再显示模式空间中的内容)
sed  -n '/^\//p'  /test/test.txt
-i:直接修改源文件
-e:Script  -e  Script :可以同时执行多个脚本
-f: 用-f读取一个文件这个文件的每一行都是一个脚本
sed  -f  /path(文件路径)/demo   file
-r:标示使用扩展正则表达式
hisory | sed 's#[[:space:]]##g' | cut  -d''  -f1  ------取出所有历史记录的首段行数字

a--
sed  -n '/^\//a \# hellowold  \n# hello linux'  /test/test.txt------在该文件里面带有/行后面追加#helloworld  
#hello linux
r--
sed '2r /test/test'  /etx/demo
w--
sed '/oot/w /test/demo.txt'   /etc/demo
sed  -n  '/oot/w /test/demo.txt'   /etc/demo
s--
sed  's/oot/OOT/'  /etc/demo  将符合oot的行全都替换为OOT



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小诚信驿站

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值