使用脚本可以提高工作效率、减少人为错误、简化复杂操作、增加系统自动化管理能力等,是 Linux 系统管理和开发中非常重要的工具之一。
1.常见指令
-
变量操作:
=:赋值操作符,用于给变量赋值。$:变量引用符号,用于获取变量的值。export:将变量导出为环境变量,使其在脚本和子进程中可用。
-
条件语句:
if:用于执行条件判断,并根据不同条件执行不同的代码块。else:与if配合使用,在条件不满足时执行的代码块。elif:用于添加额外的条件判断分支。
-
循环结构:
for:用于遍历列表或指定范围的数值,并执行相应的操作。while:在给定条件为真时重复执行一段代码块。
-
函数:
function:定义一个函数。return:从函数中返回值。call:调用函数。
-
文件操作:
ls:列出文件和目录列表。cd:改变当前工作目录。cp:复制文件或目录。mv:移动文件或目录。rm:删除文件或目录。touch:创建空文件或更新文件的访问和修改时间。
-
输入输出:
echo:打印文本到标准输出。read:从标准输入读取用户输入。>:重定向标准输出到文件,会覆盖文件内容。>>:重定向标准输出到文件,追加到文件末尾。<:重定向标准输入从文件中读取。
-
命令执行:
`command`或$(command):执行命令并将其输出作为字符串。
-
条件判断:
-eq、-ne、-lt、-gt、-le、-ge:用于数值比较的运算符。-e、-f、-d、-r、-w、-x:用于测试文件属性的运算符。
-
其他:
sleep:暂停脚本执行一段时间。exit:退出脚本,并返回一个退出状态码。
2.CMake自动编译脚本
set -x
rm -rf `pwd`/build/*
cd `pwd`/build &&cmake .. &&make
-
set -x:- 这是一个 shell 脚本的调试选项,它会打开脚本的调试模式,使得在终端上显示每个命令在执行之前先打印出来。
-
rm -rfpwd/build/*:- 这个命令会删除当前目录下 build 文件夹内的所有文件和子文件夹。
pwd表示获取当前目录的路径。
-
cdpwd/build:- 这个命令会进入当前目录下的 build 文件夹。
-
cmake ..:- 这个命令会在 build 文件夹内执行 CMake 命令,使用上一级目录(即当前目录)中的 CMakeLists.txt 文件来配置项目的构建。
-
make:- 这个命令会在 build 文件夹内执行 make 命令,编译项目生成可执行文件或库文件。
3.虚拟机网络报文重放
# 源IP和MAC地址
SRCIP=192.168.137.1
SRCMAC=00:0c:29:9a:a8:12# 目标IP和MAC地址
DSTIP=192.168.137.100
DSTMAC=90:df:7d:dc:43:f9# 为重放的test.pcap创建缓存
# tcpprep -a client -i test.pcap -o test.cache
tcpprep -a client -i $1 -o test.cache # 重写目标IP和Mac地址
# tcprewrite --infile test.pcap --outfile test_1.pcap --dstipmap=0.0.0.0/0:$DSTIP --enet-dmac=$DSTMAC
tcprewrite --infile $1 --outfile test_1.pcap --dstipmap=0.0.0.0/0:$DSTIP --enet-dmac=$DSTMAC# 重写源IP和Mac地址
tcprewrite --infile test_1.pcap --outfile test_2.pcap --srcipmap=0.0.0.0/0:$SRCIP --enet-smac=$SRCMAC# 更新数据包校验和
tcprewrite --infile test_2.pcap --outfile testFinal.pcap --fixcsum# 重放包
sudo tcpreplay -v -i ens33 -x 1 testFinal.pcap