当前位置: 首页 > news >正文

红队-shell编程篇(上)

声明

通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章

笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负

一、建立Shell文件

1. Shell简介

Shell是一种命令行界面,用于用户与操作系统进行交互。它也是一种脚本语言,允许用户编写程序自动执行一系列命令。

Linux系统中常见的Shell类型包括bash、sh、dash等,其中bash是最常用的Shell之一。

2.建立一个1.sh文件

vim 1.sh

可以利用 #! /bin/bash,#! /bin/dash,#! /bin/sh

ls -l “路径” 是查看权限的 

这三种其实不管用哪种脚本解释器最后调用的还是这个dash


比如ls -l bin/sh 发现调用的还是dash

比如我们用 echo longyu.com 保存退出

运行一下 ./1.sh


就会输出 longyu.com (在复现的时候记得给予1.sh权限)

如果出现权限不足的情况时 如图 rw可读权限
使用指令:chmod u+x 8.sh 

这里使用的是777 然后直接 ./8.sh文件即可

3.sh

vim 2.sh

直接编辑模式输入 echo baidu.com
默认是没有权限的

但是我们利用 sh 2.sh
照样执行成功 bash 2.sh 或者 dash 2.sh 一样成功,因为他们都是脚本解释器,自带权限


我们执行脚本是在当前目录下执行的,如果你的脚本在别的目录
你就要去到那个目录,或者指定好对应路径

4.source

利用source 2.sh 执行和sh命令差不多
只不过这个命令就是对颜色加深标注了

比如我们重编辑一下这个文件


直接把ls命令放到2.sh里面去 sh 2.sh 可以看见直接输出了当前目录下的 2.sh颜色加深了
这个例子就是给大家说明一下这个shell脚本如何在这个里面进行一个执行

二,变量

1.变量声明和定义

举例 定义一个name变量,name="xiaoyu"
再利用 echo $name 打印出来,这就是简单的变量声明

比如 age="27"   echo $age 打印出来的 27

我们来写复杂点,比如说 echo my name is $name,and my age is $age years old


然后就直接打印出了 姓名 和年纪

一般来说加双引号和不加效果是一样的
echo "my name is $name,and my age is $age years old"


加单引号效果是不一样的
echo 'my name is $name,and my age is $age years old'


你会发现他并没有把变量赋值打印出来,而是直接把变量写进来了
区别就是不加或者双引号可以输出变量,但是加入单引号他会把变量当字符串输出出来

2.变量拼接

echo "my name is $name,and my age is $ageyears old"


这个例子中 years与age之间没有空格 所以打印出来为空
因为变量没有事先定义 所以为空


解决办法 将变量用双引号括起来它就会做一个区分
echo "my name is $name,and my age is "$age"years old"


那么除了""还能用什么呢 用{}也可以
echo "my name is $name,and my age is {$age}years old"

这样输出的变量会将输出内容利用花括号框起来


上面讲的全部是临时的一个变量,变量是由数字,字符串下划线组成,
但是不能以数字开头 例如9name,这种是不行的

变量中间最好不要有空格 比如说wanhao

如果非要用这种可以加个下划线 wan_hao="wanhao" 这种

我们怎么查看我们定义的变量呢比如说利用set命令,
比如说set | grep name,怎么删除变量呢我们使用 unset name
再次查看set | grep name就发现没有了

3.常见变量

echo $HOME(家目录 root用户)
/root

Windows中环境变量在path下添加

echo $HOME(家目录 root用户)
/root 

which --a ls (通过这个命令查看ls命令脚本所在路径)

再看看 echo $PATH 这么一个环境变量


usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sin:/bin:/usr/local/games:/usr/games
查看输出结果 存在/usr/bin 目录 就是当我们执行ls它会帮我们找到对应得目录做一个执行,也就是Is得完整路径应该是 /usr/bin/ls 脚本

(1)方法一

根据刚刚的说法
那我们能不能把我们1.sh脚本:直接写到/usr/bin/目录下,然后在kali终端直接输出呢
就是把脚本直接放入已经定义好的路径当中去
mv 1.sh /usr/bin


(2)方法二

那么我们也可以把/root/这个目录直接添加到环境变量中去让整个目录的文件都可以直接执行
export PATH=/root:PATH
echo $PATH (查看环境变量中root目录是否被添加)


export: 是一个用于设置环境变量的关键字,使得设置的变量可以在当前 shell 以及由该 shell 启动的子进程中生效。

PATH: 这是一个非常重要的环境变量,它定义了系统在哪些目录下去寻找可执行程序。当你在命令行输入一个命令(如ls、cat等)时,系统会根据PATH环境变量所指定的目录顺序去查找对应的可执行文件,找到后就执行它。

/root:PATH: 这里是在重新定义PATH的值。它将/root目录添加到了原有的PATH变量值的最前面(假设原有的PATH值存储在变量PATH中,这里通过:PATH的形式保留了原来的值并添加了新的部分)。这样做的结果是,当系统去查找可执行程序时,会先在/root目录下查找,然后再按照原来PATH所指定的其他目录顺序查找。

4.永久变量

刚刚的export只是设置了临时变量,那么我们只有把它写入到配置文件当中才能永久生效
vi .bashrc
export PATH=/root:PATH

source /usr/bin/ .bashrc

source (变量生效 或者重启生效)
新开一个窗口查看变量 1.sh 是否生效

5.字符串相关的操作

假设我们想知道一个字符串的长度,比如我们想解析一个字符串的长度我们如何进行实现?
比如 name="wanhao" age=27 然后我们通过echo"my name is$name,and i am $age years old" 打印完整字符串


str="hello word"
echo ${#tstr}

012345 6个字符
echo ${str:0:6}

三、脚本程序传递参数

脚本如下:

echo 执行的文件名是: $0
echo 第一个参数是: $1
echo 传递的参数作为一个字符串显示: $*
echo 传递的参数独立作为每个字符串显示: $@
echo 传递到脚本的参数个数是: $#
echo 最后命令的退出状态: $?
echo 脚本运行的当前进程ID是: $$

可以向脚本程序传递一个或多个参数,脚本出的$1,里面的数字是可以依次递增的,比如$1,$2,$3等等,其中的$0(比较特殊表示文件名称)

那么好 我们利用 vim 写入脚本3.sh,再利用sh 3.sh执行文件,我们看看执行结果:
执行的文件名是:3.sh


上面显示第一个参数为空,因为我们没有给它指定任何一个参数,我们给他指定一个参数name,sh 3.sh name

然后第一个参数就为name
那么假设我们加入第二个,第三个参数,修改脚本


vim 3.sh
指定参数名分别为 sh 3.sh 1 2 3

由此得出 参数传递一般为
$n (n表示数字 可递增)
$* 就是将参数当作统一的字符串显示出来,
$@ 是将每个字符串当作独立的字符串显示,这也是$*和$@的区别
$# 代表参数的个数
$? 是查看命令执行状态的,如果显示为0,那么命令就是正常执行的,其他数字就是出错了
$$ 就是查看脚本当前进程id的

四、shell编程中进行数学运算

1.数学运算

shell编程在数学运算的时候是相当麻烦的,python中的数学运算可能很简单

在shell编程中 利用expr进行运算
expr 7+18 回显 7+18 那么该怎么运算呢 expr 7 + 18 这样写就行了 7(空格)+(空格)18


以上方法适用于加法减法


如果用乘法就会报错
expr 20 \* 10 (乘法是用\* python直接*就行了 要用\进行转义)


那么如果是除法就有两种方法 一种是 /取整数,%取余数
expr 20 / 10
expr 20 % 10

2.混合运算

expr 5 + 10 \* 7 (shell会按照先乘除后加减运算)


expr ( 5 + 10 \) \* 7


如果有括号这样直接运算就会报错,括号也要进行转义
expr \* 2

3.运算与变量结合

num=`expr 5 + 6`
echo $num

相关文章:

红队-shell编程篇(上)

声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一、建立Shell文件 1. Shell简介 Shell是一种命令行界面&am…...

电子价签会是零售界的下一个主流?【新立电子】

电子价签,作为一种能够替代传统纸质标签的数字显示屏,已经在零售行业中展现出其巨大的潜力。它具有实时更新、集中管理、高效节能的特点,实现价格的实时更新,大大减少更新价格的工作量和时间。为消费者带来更加便捷、准确的购物体…...

5 分布式ID

这里讲一个比较常用的分布式防重复的ID生成策略,雪花算法 一个用户体量比较大的分布式系统必然伴随着分表分库,分机房部署,单体的部署方式肯定是承载不了这么大的体量。 雪花算法的结构说明 如下图所示: 雪花算法组成 从上图我们可以看…...

SpringBoot | @Autowired 和 @Resource 的区别及原理分析

关注:CodingTechWork 引言 在Spring框架中,Autowired 和 Resource 是两种常用的依赖注入注解,它们都用于自动装配Bean,简化了开发者手动创建和管理Bean的繁琐工作。然而,它们的实现机制和使用方式有所不同。理解这两者…...

『SQLite』解释执行(Explain)

摘要:本节主要讲解SQL的解释执行:Explain。 在 sqlite 语句之前,可以使用 “EXPLAIN” 关键字或 “EXPLAIN QUERY PLAN” 短语,用于描述表查询的细节。 基本语法 EXPLAIN 语法: EXPLAIN [SQLite Query]EXPLAIN QUER…...

0基础学前端-----CSS DAY12

视频参考:B站Pink老师 今天是CSS学习的第十二天,今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点:CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例:拼出自己的名字 2. 字体图标2.…...

(概率论)无偏估计

参考文章:(15 封私信 / 51 条消息) 什么是无偏估计? - 知乎 (zhihu.com) 首先,第一个回答中,马同学图解数学讲解得很形象, 我的概括是:“注意,有一个总体的均值u。然后,如果抽样n个&…...

Minio-Linux-安装

文章目录 1.Linux安装1.下载源码包2.上传到/usr/local/minio1.进入目录2.上传 3.开放执行权限4.创建minio文件存储目录及日志目录5.编写启动的shell脚本1.脚本编写2.赋予执行权限 6.启动!1.执行run脚本2.查看日志3.开放9001和9000端口1.服务器2.安全组3.访问&#x…...

利用Java爬取1688商品详情API接口:技术与应用指南

引言 1688作为中国领先的B2B电子商务平台,拥有海量的商品信息。对于商家和市场研究人员来说,能够从1688获取商品详情信息,对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序,以合法、高效的方式获取…...

基于MATLAB的汽车热管理模型构建

一、引言 汽车热管理系统对汽车性能、部件寿命及驾乘体验至关重要。它能确保发动机、电池等关键部件在适宜温度工作。MATLAB 功能强大,为构建高精度热管理模型提供有效途径,助力优化系统设计与控制策略。 二、汽车热管理系统构成 2.1 发动机冷却系统&…...

LRU(1)

LRU是"Least Recently Used"(最近最少使用)的缩写,它是一种常用的页面置换算法和缓存淘汰策略。当计算机系统的内存或缓存资源有限时,LRU算法根据的历史访问记录来决定哪些数据应该被保留在内存或缓存中,哪些被淘汰。其核心思想是“…...

VSCode 使用鼠标滚轮控制字体

一、 文件 | 首选项 | 设置 二、单击在 settings.json中编辑 "editor.mouseWheelZoom": true 注注注意:保存哦!ctrlS 三、测试 按住ctrl鼠标滚轮,控制字体大小...

数据库(3)--针对列的CRUD操作

1.Create 新增 语法: insert into 表名 (列名)values (列)... 创建一个学生表用于演示: create table if not exists student( id bigint comment 编号, name varchar(20) comment 姓名 ); 1.1直接增加…...

【Linux】记录一下考RHCE的学习过程(七)

年底了,公司接的北京地铁轨道交通的项目做不完了,一百多列地铁的设备都得调,派我出差了几周,这几天才回来,出差累死了实在是没办法更新。(YOASOBI的二开票还没抢到ToT,哭死,看看回滚…...

【顶刊TPAMI 2025】多头编码(MHE)之极限分类 Part 1:背景动机

目录 1 简单概括2 几个重要发现3 主要贡献4 背景知识5 方法简介 论文:Multi-Head Encoding for Extreme Label Classification 作者:Daojun Liang, Haixia Zhang, Dongfeng Yuan and Minggao Zhang 单位:山东大学 代码:https://gi…...

使用hardhat进行合约测试

演示源码:hardhat-demo: 演示基于hardhat的HelloWord合约测试案例。 环境 NodeJs 创建工程 1.创建一个hardhat工程根目录(hardhat-demo),然后进入该目录执行。 npx hardhat执行该命令,会进行hardhat工程初始化。 提示我们是否安装该版本h…...

基于生成式对抗网络(GAN)的前沿研究与应用

引言 人工智能(AI)领域在过去几年中经历了快速的发展,尤其是深度学习的兴起带来了许多变革。其中,生成式对抗网络(Generative Adversarial Network, GAN)因其强大的生成能力成为了研究热点。自2014年Ian G…...

Apache zookeeper集群搭建

文章目录 引言I 集群搭建保证服务器基础环境一致JDK安装与配置环境变量安装与修改zk配置文件同步zk安装包与配置文件zk集群启停查看进程、状态、日志II 扩展:shell脚本一键启停引言 springCloud 脚手架项目功能模块:Java分布式锁 https://blog.csdn.net/z929118967/article/d…...

cmake使用记录

Android相关 编译一个动态库,到指定的目录 cmake_minimum_required(VERSION 3.22.1) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../v2x_algo_output/${ANDROID_ABI}) project("serial_port") include_directories(include) add_…...

nginx http反向代理

系统:Ubuntu_24.0.4 1、安装nginx sudo apt-get update sudo apt-get install nginx sudo systemctl start nginx 2、配置nginx.conf文件 /etc/nginx/nginx.conf,但可以在 /etc/nginx/sites-available/ 目录下创建一个新的配置文件,并在…...

实数的奥秘:柯西序列深度解析

实数的奥秘:柯西序列深度解析 一、柯西序列的概念与性质二、柯西序列定义无理数三、柯西序列定义实数系统 实数,是初中学到的概念,我知都知道它是有理数和无理数的统称。 然而,实数可不只是小数点后的一堆零碎儿,它背后…...

信息系统管理师试题-人力资源

信息系统管理师试题-人力资源 当组织计划的人力资源需求超过供给时,可通过下列方法解决,其中不包括() A降低录用标准,招聘新员工 B增加临时性员工和使用退休员工 C减少加班数量或工作时间 D提高员工工作效率 答案C 下…...

补偿电阻对ota零极点的影响

本文内容主要是关于补偿电阻对零极点产生的影响。 1.极点分析 该补偿电阻并不会影响在输出端的主极点,受影响的主要是镜像极点。 这里我们可以先单看电流镜部分,这个补偿电阻的作用在于将极点推向原来的两倍,从而达到增加带宽的目的[1]。 …...

UVM: uvm_sequence

topcic sequence overview sequence excution flow sequence class callbacks sequencer driver communication...

编译技术实验三之编译器的构造和设计

一、实验目的: 我们将设计多个不同的综合实验项目提供给学生选择。(如:LL(1)文法自动生成语法分析程序的设计;单词的自动识别与智能纠错;语言的程序编辑器;数学计算式的识别等)学生可在这些项目中选择1个项…...

数据挖掘——数据预处理

数据挖掘——数据预处理 数据预处理数据预处理 ——主要任务数据清洗如何处理丢失的数据如何处理噪声数据如何处理不一致数据 数据集成相关分析相关系数(也成为皮尔逊相关系数)协方差 数据规约降维法:PCA主成分分析降数据——抽样法数据压缩 数据预处理 数据预处理…...

ECharts饼图下钻

背景:项目上需要对Echarts饼图进行功能定制,实现点击颜色块,下钻显示下一层级占比说明:饼图实现点击下钻/面包屑返回的功能 数据结构 [{name: a,value: 1,children: [...]},... ]点击下钻 // 为图表绑定点击事件(需要…...

【RK3568笔记】Android修改开机动画

概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式,不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存(压缩方式要求是存储压缩),并将保存的文件名命名为 bootanimation.zip,这个 bootanim…...

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器,获得数据后,需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据,那么这个上位机是什么机器? 我们的笔记本电脑就可以当成上位机。 两个手…...

代码随想录day39 动态规划7

打家劫舍 题目:198.打家劫舍 213.打家劫舍II 337.打家劫舍III 需要重做:全部 198.打家劫舍 思路:第i个房子偷与不偷,取决于第i-2个房子和第i-1个房子 注意:注意下标的一致性。现在的下标含义是房子的下标&#x…...