shell sed awk

什么是shell
翻译官 内核与用户之间的解释器程序(/bin/bash)

shell种类

配置文件:/etc/shells/bin/sh/bin/bash/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/nologin/bin/tcsh/bin/csh

规范脚本的构成

#!表明解释器
#注释信息
可执行的命令

脚本的执行方式

加x执行权限 [绝对路径  相对路径]  开启子进程
bash  脚本文件;  sh 脚本文件   开启子进程
source  脚本文件;脚本文件      不开子进程

变量的类型

环境变量user (当前登录的系统用户)UID  (当前登录用户的uid)pwd  (当前所在路径)home (当前用户家目录)ps1  (一级提示符)ps2  (二级提示符)
位置变量$1  $2  $3
预定义变量$0  执行脚本的名字$?  返回上一条命令的结果(0正确   非0错误)$$  当前脚本的进程号$#  统计位置变量个数$*  所有位置变量的值
自定义变量变量民的要求(1)数字、字母、下划线组成(2)不能以数字开头(3)等号两边不能有空格(4)如果变量有值,则会覆盖

定义变量

 变量名=变量值 ch=18read -p "请输入您要查询的用户名:" nameexport  定义全局变量

取消变量

 unset export -n 撤销全局变量(变量存在)

引号的区别

 “”:  切丁范围‘’:  界定范围  屏蔽特殊字符的含义``或$():获取命令的输出结果

shell中的运算

+  -  *  /  %
方法一:expr  1 + 1 (注意必须有空格)
\转义符号:屏蔽之后一个字符的特殊含义【主要在乘法中运用】方法二:echo  $[]  ;  echo $(())方法三:改变变量本身的值,不显示结果let  a=a+1let a+=1let a++方法四:bc工具scale:scale=N(数字)  指定小数位的长度

测试

条件测试:格式: test  表达式; [  表达式  ]
字符串测试:==     !=
数值测试:-eq  等于         -ne  不等于-gt  大于     -ge 大于等于-lt  小于     -le  小于等于
文档测试:-e 判断是否存在,不区分文件或目录-d 判断是否为目录-f 判断是否为文件-r 判断是否可读(对root用户无效)-w 判读是否可写(对root用户无效)-x 判断是否可执行
#取反测试:加!

判断

逻辑判断&&       且             前面任务成功,才执行后续任务||       或             前面任务失效,才执行后面任务;        前面无逻辑关系  前面执行完毕后,继续执行后面任务
if判断if单分支结构:if   条件测试;then命令序列fiif双分支结构:if 条件测试1;then命令序列1else命令序列2fiif多分支结构:if  条件测试1;then命令序列1elif  条件测试2;then命令序列2elif  条件测试n;then命令序列3else命令序列4fi

循环

for循环    (有限循环)for 变量名  in  值列表do命令序列done#值列表:  (1)1 2 3 4(2){1..4}(3)`cat /user.txt`  或  $(cat  /user.txt)while循环   (无限循环)while    条件测试do命令序列done#ping -c 选项可以设置ping的次数-i 选项可以设置多次ping之间的间隔时间(单位秒)-w 选项可以设置ping不通时的超时时间#随机数$RANDOMcase判断格式case   变量      in模式1)命令序列1;;模式2)命令序列2;;...*)默认命令序列esac

函数的定义方法

 方法一:function 函数名{命令序列...}方法二:函数名(){命令序列...}

函数的调用

直接使用“函数名”的形式调用,如果该函数能够处理位置参数,则可以使用“函数名  参数1  参数2..  ...” 的形式调用。

shell版本的fork炸弹

#!/bin/bash
.(){
.|.&
}
.

中断及退出

break    可以结束整个循环
continue    结束本次循环体,进入下一次循环
exit    结束整个脚本

字符串截取及切割

子串截取的用法:${变量名:起始位置:长度}  //起始位置从0开始
子串替换的两种用法:只替换第一个匹配结果:${变量名/old/new}
替换全部匹配结果:${变量名//old/new}
字符串掐头去尾:从左向右,最短匹配删除:${变量名#*关键词}从左向右,最长匹配删除:${变量名##*关键词}从右向左,最短匹配删除:${变量名%关键词*}从右向左,最长匹配删除:${变量名%%关键词*}

字符串初值的处理

${变量名:-变量值}:判断变量是否存在,决定变量的初始值

正则

基本正则.        匹配任意单个字符*       匹配前一个字符任意次数(不允许单独使用)^     匹配行首$       匹配行尾[]      集合,匹配集合中任意单个字符[^]        对集合取反\{n,m\}    匹配前一个字符n到m次\{n\}    匹配前一个字符n次\{n,\} 匹配前一个字符n次及n次以上\(\)  保留
扩展正则+  最少匹配一次?  最多匹配一次{n,m}  匹配n到m次()  保留| 或者\b    单词边界

sed基本用法

用法1:前置命令 | sed [选项] ‘条件指令’
用法2:sed [选项] ‘条件指令’ 文件...常用选项:-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)-r(让sed支持扩展正则)-i(让Sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)
打印(p):sed -n ‘条件’ 文件第2行:2p2~5行:2,5p2和5行:2p;5p第2以及后面的5行:2,+5p奇数行:1~2p偶数行:2~2p包含root的行:/root/p##/正则/p$=:输出文件的行数
删除(d):2~5行:2,5d包含root的行:/root/d不包含root的行:/root/!  #!符号表示取反文件的最后一行:$dsed '$d' a.txt
替换(s/old/new/option):每行中第一个aaa替换为AAA:s/aaa/AAA每行中的第3个aaa替换为AAA:'s/aaa/AAA/3'所有的aaa替换为AAA:s/aaa/AAA/g'所有的aaa都删除:s/aaa//g a.txt   #替换为空字符串将第4~7行注释掉:4,7s/^/#/   #行首加#号解除以#an开头的行的注释:s/^#an/an/'  #去除行首的#号替换操作的分割“/”可改用其他字符,如#、&等,便于修改文件路径删除文件中每行的第二个、最后一个字符:s/.//2;s/.$//第1个字符、中间的所有字符、倒数第1个字符 三个部分,然后通过替换操作重排顺序为“3-2-1” s/(^.)(.*)(.$)/\3\2\1/
sed多行文本处理i:在指定的行之前插入文本a:在指定的行之后追加文本c:替换指定的行在第二行后面,追加xx:2a xx在第二行前面,插入xx:2i xx将第二行替换为xx:2c xx

awk

格式:awk [选项] ‘[条件]{指令}’ 文件
选项:-F 可指定分隔符(默认将空格、制表符等作为分割符)
指令:print (print是最常用的编辑指令,过滤)打印文档的第1列和第3列:awk '{print $1,$3}' test.txt
awk常用内置变量:$0 文本当前行的全部内容$1    文本的第1列$2    文本的第二列$3    文本的第三列,以此类推NR    文件当前的行号NF   文件当前行的列数(有几列)
awk的print指令不仅可以打印变量。还可以打印常亮示例:awk -F: '{print $1,"的解释器:",$7}'  /etc/passwd
使用数字/字符串比较设置条件比较符号:==(等于)            !=(不等于)>(大于)         >=(大于等于)<(小于)            <=(小于等于)示例:awk -F: '$3>=1000{print $1,$3}' /etc/passwdawk -F: '$1=="root" /etc/passwd
逻辑测试条件:逻辑符号:&&(逻辑且)             ||(逻辑或)示例:awk -F: '$3>10 && $3<20' /etc/passwdawk -F: '$3>1000 || $3<10' /etc/passwd
数学运算:运算符号:+  -  *  /  %示例:awk 'BEGIN{print 2+3}'awk 'BEGIN{x++;print x}'awk 'BEGIN{x=8;print x+=2}'awk 'BEGIN{print 2*3}'
awk [选项] 'BEGIN{指令}{指令}END{指令}' 文件BEGIN{}:行前处理,读取文件内容前执行,指令执行1次{}:逐行处理,读取文件过程中执行,指令执行n次END{}:行后处理,读取文件结束后执行,指令执行1次示例:awk 'BEGIN{A=24;print A*2}'awk 'BEGIN{print x+1}' #x可以不定义,直接用,默认值为0awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd  #统计系统中使用bash作为登录shell的用户总个数
awk流程控制(if分支、awk数组)if分支结构(单分支、双分支、多分支)单分支示例:awk -F: '{if($3<=1000){i++}}END{print i}' /etc/passwd  #统计/etc/passwd文件中UID小于或等于1000的用户个数双分支示例:awk -F: '{if($3<=1000){i++}else{j++}}END{print i,j}' /etc/passwd  #分别统计/etc/passwd文件中UID小于或等于1000、UID大于1000的用户个数多分支示例:awk -F: '{if($3<10){i++}else if($3>50){j++}else{k++}}END{print i,j,k}' /etc/passwd  #分别统计/etc/passwd文件中UID小于10、大于50、在10~50之间的用户个数
awk数组相当于可以存储多个值得特殊变量定义数组的格式:数组名[下标]=元素值示例:awk 'BEGIN{a[0]++;print a[0]}'调用数组的格式:数组名[下标]示例:awk 'BEGIN{a[0]=11;a[1]=88;print a[0],a[1]}'在awk中利用for循环遍历数组(显示数组所有内容)for循环基本格式  for(变量名 in 数组名){执行指令}awk 'BEGIN{abc["a"]="aaa";abc["b"]="bbb";abc["c"]="ccc";for(i in abc){print i,abc[i]}}'准备素材test,将其内容交给awk利用数组加for循环统计不同的行有多少,分别出现了几次[root@abc opt]# cat  testabcxyzopqabcabcxyzawk '{a[$1]++}END{for(i in a){print i,a[i]} }' test编写脚本,找到尝试登录服务器大于等于5次的人的ip发邮件给管理员#!/bin/bashx=$(awk '/Failed password/{ip[$11]++}END{for(i in ip){print ip[i],i}}' /var/log/secure |awk '$1>=5')   [ -z "$x" ] && exitecho "有人尝试登录服务器,信息是$x" | mail -s test root

shell脚本、awk、sed用法相关推荐

  1. shell脚本之echo用法

    shell脚本之echo用法 1.echo常见转义符号 符号 功能描述 \b 退格键(backspace) \f 换行但光标仍停留在原来的位置 \n 换行且光标移至行首 \r 光标移至行首但不换行 \ ...

  2. shell脚本中的$用法

    shell脚本中的$用法 变量 含义 $0 shell脚本的文件名 $1 ~ $n 添加到shell脚本中的各参数: 即执行shell脚本时后跟的内容: $1为第1参数,$2为第2参数 $? shel ...

  3. 详解Shell脚本:sed命令工具 ,awk命令工具

    -----------------------------概述----------------------------------- Linux文本处理工具(以下都是命令和工具,而且只是作为展示,不能 ...

  4. shell学习之-sed用法解析_Shell脚本之sed的使用

    1.sed命令:主要作用是查找:新增 删除 和修改替换. user.txt daokr#cat user.txt ID Name Sex Age zhang M 19 wang G 20 cheng ...

  5. shell脚本常用语句用法笔记

    脚本基本语句用法笔记 grep -i 查询时不区分大小写 -n打印匹配的行号 -v 打印不匹配的行 -AX包括每次匹配之后X行 -BX包括每次匹配之后X行 cat /etc/passwd |grep ...

  6. Shell脚本中$的用法

    2019独角兽企业重金招聘Python工程师标准>>> $0: 脚本名称,相对路径还是绝对路径要看调用的方式.如果是在父目录中,./dollarTest.sh调用,那么$0就是 ./ ...

  7. shell脚本的一些用法笔记

    1.在一般命令窗口输入的命令直接拷贝到脚本文件中就可以执行. 2.判断文件或文件夹是否存在.具有执行权力等.[改写自网络] #!/bin/shNovaPath="/var/log/httpd ...

  8. shell脚本之case用法

    你会经常发现自己在尝试计算一个变量的值,在一组可能的值中寻找特定值.在这种情形下, 你不得不写出很长的if-then-else语句,就像下面这样. $ cat test25.sh#!/bin/bash ...

  9. shell脚本——awk详细介绍(包含应用案例)

    三剑客awk详解 awk概述 awk处理文本方式 awk工作原理 awk语法 汇总示例 内部变量 格式化输出 模式(正则表达)和动作 概念 字符串比较 数值比较 目的 关系运算符 算术运算 多条件运算 ...

  10. 【shell】shell脚本实战-sed流编辑器

    文章目录 sed的介绍 sed的执行过程 sed的用法 sed常用选项 实战案例 1. 将 passwd中root替换为zmgaosh 2. 按行查找替换 1)单行替换: 2)多行替换: 3)删除2- ...

最新文章

  1. 计算机视觉 | YOLO开源项目汇总
  2. Linux下安装Oracle参数自动初始化脚本
  3. 如何取消掉计算机更新图标,XP系统如何关闭右下角中的自动更新图标?
  4. 怎么建立微信生态用户增长模型?
  5. Asp.Net Core Blazor之容器部署
  6. java setsize_Java Vector setSize()方法与示例
  7. qdialog 返回值_QDialog exec()并获取结果值
  8. .net core + headless chrome实现动态网页爬虫
  9. 刷爆了!国企33岁程序员年入40w,直言:想降薪进阿里钻研技术
  10. 【linux命令】tar命令
  11. 师从施一公,4年8篇CNS,作为西湖大学博士后,她又以一作发了Science
  12. U盘文件数据恢复工具如何使用
  13. 看山不是山,看水不是水
  14. 山寨新浪微博——TabBarController
  15. appinventor计算机教程,App Inventor编程开发集锦2-计算器-第2课-实现常规操作
  16. bilibili老版本_bilibili网页版下载
  17. 谷歌浏览器崩溃,无法搜索
  18. 区块链技术运用在票据领域-票据链
  19. 一款百度网盘不限速下载神器
  20. 加油站优惠券组合方式

热门文章

  1. 系统集成项目管理工程师-法律法规与标准规范
  2. 小米手机扩容教程_手机内部存储空间扩容方法
  3. java将邮件保存到本地文件夹_JavaMail 邮件文件夹管理
  4. 【深度思考,极客大学Java进阶训练营
  5. linux 防火墙 443端口映射,linux防火墙实现端口转发、端口映射及双向通路
  6. 触控手机、握笔握手、拎箱包、拿鸡蛋 可穿戴仿生手将投入量产!
  7. 浪漫主义和革命英雄主义的回忆
  8. 爬虫实例5:使用scrapy框架获取链家网二手房最新信息(获取单个城市所有街区二手房信息可以使用selenium动态获取页数)
  9. 禅与摩托车维修艺术_摩托车与编程之禅
  10. 高德地图-初始化地图