shell 5-6合集
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,sell 5回顾正则表达式基本正则 ^ $ [abc] [^] . * \{n,m\} \{n\} \{n,\} \(\)扩展正则+ ? {n,m} a|b|c (
千家信息网最后更新 2025年02月23日shell 5-6合集
sell 5
回顾
正则表达式基本正则 ^ $ [abc] [^] . * \{n,m\} \{n\} \{n,\} \(\)扩展正则+ ? {n,m} a|b|c () \b
sed 非交互式编辑文本
前置命令 | sed 选项 (定址符)指令 sed 选项 (定址符)指令 被处理的文档选项 : -n -r -i指令: p d s
==============================
a行下添加 i行上添加 c替换整行
找到使用bash的用户,按照 用户名 --> 密码的方式显示
#!/bin/bashn=`sed -n '/bash$/s/:.*//p' /etc/passwd`for i in $n 将找到的使用bash的用户名交给for循环do p=`grep $i: /etc/shadow` 将名字与shadow对比 p1=${p#*:} 找到对应的行,掐头 p2=${p1%%:*} 去尾,得到纯粹的密码 echo "$i --> $p2" 输出最后结果done
awk 精确搜索文档
用法:awk 选项 (条件)指令 被处理的文档前置指令 | awk 选项 (条件)指令
awk '{print}' test 输出所有awk '{print $2}' test 输出每行第2列awk '/hello/{print $2}' test 找到有hello的行,输出他的第2列awk的内置变量 $1 $2 $3..... $0 所有列 NR行号 NF列号
awk默认分隔符为空格,可以使用-F修改分隔符awk -F: '{print $1}' user 定义分隔符为冒号, 输出第一列awk -F[:/] '{print $10}' user 定义分隔符为冒号或者斜线, 输出第10列
awk -F: '{print $1"的解释器是"$7}' user 输出特定列,常量+变量ifconfig eth0 | awk '/RX p/{print "本机eth0的接收流量是"$5"字节"}' 获取网卡接收流量ifconfig eth0 | awk '/TX p/{print "本机eth0的发送流量是"$5"字节"}' 获取网卡发送流量
df -h | awk '/vda1/{print "当前主机跟分区剩余空间是"$4}' 获取根分区剩余空间awk '/Failed/{print "***者的ip是"$11}' /var/log/secure
awk的工作时机
BEGIN任务 执行1次逐行任务 执行N次END任务 执行1次BEGIN{ }{ }END{ }awk 'BEGIN{指令} {指令} END{指令}' 文件awk 'BEGIN{print "ABCD"}{print}END{print NR}' user tab键 \t 制表符awk -F: 'BEGIN{print "User\tUid\tHome"}{print $1"\t"$3"\t"$6 }END{print "总计 "NR" 行"}' user
========================================
awk处理条件
1, 使用正则作为条件
awk -F: '/^root/{print $1}' user 找以root开头的行,输出第1列awk -F: '/^root|^bin/{print $1}' user 找以root或者bin开头的行,输出第1列awk -F: '/^(root|bin)/{print $1}' user 同上awk -F: '$1~/root/{print $1}' user 找第一列包含root的行,并且输出第1列awk -F: '$1!~/root/{print $1}' user 第一列不包含root
2, 数字与字符串做条件 == != > >= < <=
awk -F: 'NR==1{print}' user 输出第1行awk -F: 'NR>2{print}' user 输出行号大于2的行awk -F: 'NR>=2{print}' user 输出行号大于等于2的行awk -F: '$1=="root"{print}' /etc/passwd 输出第1列是root的行awk -F: '$1~/root/{print}' /etc/passwd 输出第1列包含root的行awk -F: '$1~/oot/{print}' /etc/passwd 输出第1列包含oot的行awk -F: '$3>1000{print}' /etc/passwd 输出第三列大于1000的行
3, 使用逻辑符号 && 并且 || 或者
awk 'NR>=2 && NR<=4{print}' user 输出2~4行awk 'NR<=1 || NR>4{print}' user 输出第1行,或者大于4的行awk -F: '$3>=1000 && $3<=1005' /etc/passwd 当任务只是print时可以省略{print} 输出所有普通用户的家目录与解释器 例如: 张三的家目录是XXX ,解释器是 XXXawk -F: '$3>=1000 && $3<=1100{print $1"的家目录是"$6",解释器是"$7 }' /etc/passwd
4,运算
awk 'BEGIN{x++;print x}' 把x+1 然后输出x的值awk 'BEGIN{x=8;print x+=2}' 定义变量x=8, 然后+2再输出结果awk 'BEGIN{x=8;x--;print x}' x定义好,然后减1,输出awk 'BEGIN{print 2+3}' awk 'BEGIN{print 2*3}'awk 'BEGIN{print 2*3}'
shell 6
回顾
awk 精确搜索文档-F 定义分隔符 print$1 $2 $3 .... $0 NR NF ""正则表达式 / / ~ !~字符串与数字 == != > >= < <=逻辑符号 && ||运算 x++
=============================
在awk中使用if判断
单分支:awk '{if(/bash$/){x++}}END{print x}' user 如果找到以bash结尾的行,就把x+1,最后输出x的值awk -F: '{if($3>=1000){x++}}END{print x}' /etc/passwd 如果第3列(UID)大于等于1000,则把x+1,,最后输出x的值双分支:awk -F: '{if($3>=1000){x++}else{y++}}END{print x,y}' /etc/passwd 如果第3列(UID)大于等于1000,则把x+1,否则把y+1,最后输出x与y的值
awk数组,数组可以理解为能保存多个值的特殊变量
数组名[下标]=元素值awk 'BEGIN{a[1]=100;a[2]=200;print a[2],a[1]}'awk 'BEGIN{a["x"]=100;a["y"]=200;print a["y"],a["x"]}'awk 'BEGIN{a["x"]="abc";a["y"]="xyz";print a["y"],a["x"]}'
在awk中使用数组+for循环实现遍历数组
awk 'BEGIN{a[1]=100;a[2]=200;a[3]=300;for(i in a){print i,a[i]}}'awk '{a[$1]++}END{for(i in a){print a[i],i}}' abca[abc]=3a[xyz]=2a[zxc]=1a[192.168.0.1]=3a[172.10.10.10]=2a[100.100.100.100]=1
使用awk统计网站访问量:
/var/log/httpd/access_log是httpd服务的访问日志awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log 最终显示访问的次数与对应的ip地址ab -c 1 -n 10000 http://172.25.0.11/ 访问10000次awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log | sort -nr 统计完之后再排序,访问量最大的在第一行
#!/bin/bashn=`uptime |sed -n 's/.*://p'`echo 主机平均负载是$nifconfig eth0 | awk '/RX p/{print "主机的eth0 网卡接收流量是"$5"字节"}'ifconfig eth0 | awk '/TX p/{print "主机的eth0 网卡发送流量是"$5"字节"}'free -h |awk '/^Mem/{print "主机剩余内存容量是"$4}'df -h | awk '/\/$/{print "根分区剩余容量是"$4}'awk 'END{print "当前主机用户总数是"NR}' /etc/passwdw=`who | wc -l`echo 当前登录的账户数量是$w个p=`ps aux | wc -l`echo 当前主机开启的进程数量是$p个r=`rpm -qa | wc -l`echo 当前主机安装的软件包数量是$r个
输出
指令
主机
流量
分隔符
数组
条件
正则
变量
字节
文档
用户
网卡
剩余
任务
数量
行号
处理
精确
冒号
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
电脑的服务器在哪
学java软件开发有前途
校园网络安全论文1000
未成年网络安全教育手抄报
网络安全向导有什么用
亚博海南网络技术
平谷区数据网络技术开发售后服务
保定大为软件开发公司面试
蒙文如何存储到数据库
excel表怎么变成数据库
深圳crm软件开发
政府分会场需要独立服务器
奥维企业服务器怎么购买
6g网络技术组有哪些单位
为什么要学习数据库
c语言 软件开发
网络安全宣传周电信日主题班会
动态更新数据库数据库表
网络安全领域的立法
服务器安全日志清理软件
内蒙古高考填报数据库下载
服务器异常数据传输
宁强租房软件开发
2008的数据库怎么恢复
串口服务器设置
北京项目软件开发需要多少钱
vbs连接sql数据库
网络安全防范工作要求
6g网络技术组有哪些单位
计算机网络技术维护大全