sh脚本实战
做了什么东西还是要尽快移动到博客上,不然回头看自己写的东西已经看不懂了。。。
凭着回忆+搜资料,把当初写sh脚本的过程写上来。
首先新建一个.sh文件,用vim就可以
在sh的第一行,写上
#!/bin/sh
这是告诉系统,这个文件是脚本文件。一定要有
接下来就可以把它当做一个控制台,你需要在控制台里怎么操作,就可以把命令原样地贴在这里。
例如创建一个文件:
cd ~/Downloads
mkdir Geronimo
也可以在sh中运行其他sh脚本:
sh pcapname.sh ~/Downloads/Geronimo
这条命令,就是运行pcapname脚本,并传入路径参数~/Downloads/Geronimo
在pcapname.sh中,$1就是传入的参数,即~/Downloads/Geronimo,如果传入了更多参数,就是$2,$3以此类推
而要对$1文件夹下的所有文件进行操作:
for var in $1/*
do
echo $var
done
不过这里的$var表示整条路径:~/Downloads/Geronimo/filename
所以当需要获取文件名的时候,需要提取字符串。
filepath=${var%.*}
filename=${filepath##*/}
这里的filepath是去除了后缀名的字符串,filename是去除了/左边所有字符串的文件名称。
需要拼接字符串时,如下:
tcpfile=$filepath/${filename}_TCP.txt
引用的字符串需要添加$,而为了不与后面的字符串混淆,在filename外添加{}。
sh中的字符串的截取和拼接可以参考这里
实战部分:
我在linux中使用tranalyzer从流量中提取流量特征,生成_flows.txt文件和_pl_iat.txt文件,使用tawk脚本可以从_flows.txt文件中提取所有的tcp特征。
我的流量在mei1和mei2文件夹中,每个文件夹下有50个子文件夹,包含了50种流量,每个子文件夹下有20个pcap文件
对每种流量,提取出flows,pl_iat,tcp内容,放到三个文件夹内,每个文件夹生成50个.txt文件,每个.txt文件包含了子文件夹的20个pcap文件的特征。
我使用了三个.sh文件层层调用,分别为main.sh,pcapname.sh,extractor.sh
main.sh
#!/bin/sh
mkdir /mnt/hgfs/mei/mei1/mei1
mkdir /mnt/hgfs/mei/mei1/mei1/flowsfiles
mkdir /mnt/hgfs/mei/mei1/mei1/tcpfiles
mkdir /mnt/hgfs/mei/mei1/mei1/pl_iatfiles mkdir /mnt/hgfs/mei/mei2/mei2
mkdir /mnt/hgfs/mei/mei2/mei2/flowsfiles
mkdir /mnt/hgfs/mei/mei2/mei2/tcpfiles
mkdir /mnt/hgfs/mei/mei2/mei2/pl_iatfiles sh pcapname.sh /mnt/hgfs/mei/mei1
sh pcapname.sh /mnt/hgfs/mei/mei2
这里其实也可以写循环实现,但是当时时间紧急,就用笨办法了,反正不多
pcapname.sh
#!/bin/sh #$1 is the directory of the upper level file of the .pcap file
#var is the name of the directory of the .pcap file
# ${var#*ww_} remove the prefix, and input it to the extractor.sh
for var in $1/*
do
sh extractor.sh $var ${var#*ww_} $1/${1##*/}
done
这里用来获取每个子文件夹的名称,每个文件夹的名称形式是WWW_52PK_com,我需要从中提取52PK关键字
.extractor.sh
#!/bin/sh #$1 is the directory of the .pcap file(don't including the ***.pcap file)
#$2 is the name of the directory of the .pcap file(remove the prefix name)
#var is the name of the .pcap file for var in $1/*
do
filepath=${var%.*}
filename=${filepath##*/} #cd ~/Downloads/tranalyzer2-0.8.2lm2/tranalyzer2-0.8.2/trunk/tranalyzer2/src/
#./tranalyzer -r $var -w $filepath/ #cd ~/Downloads/tranalyzer2-0.8.2lm2/tranalyzer2-0.8.2/trunk/scripts/tawk/
flowsfile=$filepath/${filename}_flows.txt
tcpfile=$filepath/${filename}_TCP.txt
pl_iatfile=$filepath/${filename}_pl_iat.txt
#./tawk 'tcp()' $flowsfile > $tcpfile #./tawk -t -H '{
# n = split($L2L3L4Pl_Iat,A,";");
# for(i=1;i<=n;i++){
# split(A[i],B,"_");
# printf "%f\t%d\t",B[2],B[1];
# } cp $flowsfile $3/flowsfiles/$2_${flowsfile##*/}
cp $tcpfile $3/tcpfiles/$2_${tcpfile##*/}
cp $pl_iatfile $3/pl_iatfiles/$2_${pl_iatfile##*/} done
这里用#的地方是我的功能性代码
到这里就结束了
sh脚本实战的更多相关文章
- Shell脚本实战:日志关键字监控+自动告警
一个执着于技术的公众号 该程序使用场景说明:主要用于Linux服务器监控程序日志,如出现关键字异常则触发相应的动作或告警操作,通知到邮件联系人. 一.安装邮件服务 1.解压 tar -jxf mail ...
- sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory. 分析:这是不同系统编码格式引起的:在windows系统中 ...
- linux执行sh脚本文件命令
linux执行sh脚本文件命令 很多时候需要多个命令来完成一项工作,而这个工作又常常是重复的,这个时候我们自然会想到将这些命令写成sh脚本,下次执行下这个脚本一切就都搞定了,下面就是发布代码的一个脚本 ...
- .sh脚本判断判断某一变量是否为某一数值
.sh脚本中,判断某一变量(例如:OEM_CUSTOMER_SUPPORT)是否为某一数值(例如:0),并根据条件做不同处理,写法如下: if [ $OEM_CUSTOMER_SUPPORT -eq ...
- sh脚本学习之: sh脚本 、sed、awk
sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...
- 安装GRID时跑root.sh脚本报错(ORA-27091: unable to queue I/O)
在安装GRID过程中,运行root.sh脚本时报如下信息: Adding Clusterware entries to upstart CRS-2672: Attempting to start 'o ...
- sh脚本异常:bad interpreter: No such file or directory
转:http://bluedest.iteye.com/blog/1674963 在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file o ...
- ubuntu sh脚本双击运行
自从13.04以后,双击sh脚本文件就已经默认是geidt打开了,要想运行,从nautilus-->文件-->首选项-->行为-->可执行文件 有三个选项,默认是第二个,如果想 ...
- sh脚本执行Java程序
1.不引用Jar包或者资源文件夹 最简单的程序Hello World. 首先创建Hello.java public class Hello { public static void main(Stri ...
随机推荐
- [易学易懂系列|rustlang语言|零基础|快速入门|(5)|生命周期Lifetime]
[易学易懂系列|rustlang语言|零基础|快速入门|(5)] Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = ...
- MySQL Audit日志审计
一.简介 数据库审计能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库受到的风险行为进行告警,对攻击行为进行阻断,它通过对用户访问数据库行为的记录.分析和汇报,用来帮助用 ...
- 小程序wx.showToast()方法实现文字换行
小程序wx.showToast()方法实现文字换行 在文字中间加上 '\r\n' 真机中生效 wx.showToast({ title: `换行前内容\r\n换行后内容`, icon: 'none' ...
- vue项目和django项目交互补充,drf介绍,restful规范
目录 一.vue项目与django项目的交互 二.drf(Django-restframework) 1. drf主要知识点 2. drf框架安装 3. web接口(WEB API) 4. restf ...
- JavaScript相关知识点
㈠JavaScript编写位置 ⑴可以将js代码编写到外部js文件中,然后通过script标签引入 写到外部文件中可以在不同的页面中同时使用,也可以利用到浏览器的缓存机制 推荐使用的方式 ...
- java上传大文件解决方案
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...
- 分析 JUnit 框架源代码
本文转载至http://www.ibm.com/developerworks/cn/java/j-lo-junit-src/ 分析 JUnit 框架源代码 理解 JUnit 测试框架实现原理和设计模式 ...
- Mockito 2 参数匹配器
Mockito 通过使用 equals() 这种自然的 Java 样式来校验参数值.有时候,当需要有其他一些灵活性的时候,你可能会要求使用参数匹配(argument matchers). 请参考下面的 ...
- linux C线程
一个应用程序可以启动若干个线程: 线程,是程序执行的最小单位: 一般一个最简单的程序最少有一个线程,就是程序本身,也是主函数: 一个线程阻塞不会影响另一个线程: 多线程的进程可以尽可能多的利用系统CP ...
- 棋盘问题 ( POJ -1321 )(简单DFS)
转载请注明出处:https://blog.csdn.net/Mercury_Lc/article/details/82684942作者:Mercury_Lc 题目链接 题解:dfs入门,就是每个点都搜 ...