泷羽sec-星河飞雪-shell-2

news/2024/11/23 21:40:23/

免责声明

学习视频来自 B 站up主泷羽sec,如涉及侵权马上删除文章。

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

泷羽sec官网:https://longyusec.com/

泷羽sec B站地址:https://space.bilibili.com/350329294

泷羽sec帮会:https://wiki.freebuf.com/front/societyFront?invitation_code=5a2005d9&society_id=239&source_data=2

文章目录

    • 传递参数
    • shell运算符
      • 算数运算符
        • 常用符号
      • 关系运算符
      • 布尔运算符
      • 逻辑运算符
      • 字符串运算符
      • 文件测试运算符
      • 自增自减运算符
        • `let`
        • `$(())$`
        • `(())`

传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为 $nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数。

例如可以使用 $1$2 等来引用传递给脚本的参数,其中 $1 表示第一个参数,$2 表示第二个参数,依此类推。

参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

shell运算符

算数运算符

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

add=`expr 2 + 2`
echo "两数之和为 : $add"

(注意使用的是反引号 *`* 而不是单引号 *'*)

常用符号
运算符说明示例
+加法expr $a + $b
-减法expr $a - $b
*乘法expr $a \* $b
/除法expr $b / $a
%取余expr $b % $a
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[$a == $b] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[$a != $b]返回 true。

在代码实现中,运用*乘法运算时,需要用到\进行转义,才能正常完整运算

关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ]
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ]
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ]
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ]
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ]
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ]

布尔运算符

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ]
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ]
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ]

逻辑运算符

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]]
||逻辑的 OR`[[$a -lt 100

字符串运算符

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ]
!=检测两个字符串是否不相等,不相等返回 true。[ $a != $b ]
-z检测字符串长度是否为0,为0返回 true。[ -z $a ]
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n "$a" ]
$检测字符串是否不为空,不为空返回 true。[ $a ]

文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

操作符说明举例
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ]
-c file检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ]
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ]
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。[ -f $file ]
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。[ -g $file ]
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。[ -k $file ]
-p file检测文件是否是有名管道,如果是,则返回 true。[ -p $file ]
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ]
-r file检测文件是否可读,如果是,则返回 true。[ -r $file ]
-w file检测文件是否可写,如果是,则返回 true。[ -w $file ]
-x file检测文件是否可执行,如果是,则返回 true。[ -x $file ]
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。[ -s $file ]
-e file检测文件(包括目录)是否存在,如果是,则返回 true。[ -e $file ]

有名管道(Named Pipe),也被称为 FIFO(First In, First Out),是一种在 Unix 和类 Unix 操作系统(如 Linux)中用于进程间通信(IPC, Inter-Process Communication)的机制。与无名管道(由 shell 命令通过管道符 | 创建的临时管道)不同,有名管道可以在文件系统中以文件的形式存在,因此得名“有名管道”。

有名管道具有以下特点:

  1. 持久性:有名管道存在于文件系统中,直到显式地被删除,而无名管道仅存在于创建它们的进程的生命周期内。

  2. 双向通信:有名管道可以支持双向通信,即两个进程可以读写同一个管道。不过,在实际使用中,通常会通过创建两个有名管道来实现全双工通信,一个用于读,一个用于写。

  3. 同步:有名管道提供了一定程度的同步机制,确保数据按发送顺序被接收。

  4. 文件属性:有名管道在文件系统中表现为一种特殊类型的文件,可以通过 ls -l 命令查看其属性,文件类型显示为 p

  5. 使用限制:有名管道主要用于相关进程间的通信,且通常是在本地系统上的进程间。

在 shell 脚本中,可以使用 -p 选项与 test 命令(或其简写形式 [ ])来检查一个文件是否是有名管道。例如:

file="/path/to/named_pipe"
if [ -p "$file" ]; thenecho "$file is a named pipe."
elseecho "$file is not a named pipe."
fi

如果 $file 指向一个有名管道文件,上述脚本将输出 "$file is a named pipe."

创建有名管道可以使用 mkfifo 命令。例如:

mkfifo /tmp/my_named_pipe

这将在 /tmp 目录下创建一个名为 my_named_pipe 的有名管道文件。之后,不同的进程可以打开这个管道文件进行读写操作,实现进程间通信。

自增自减运算符

let
#!/bin/bash# 初始化变量
num=5# 自增
let num++# 自减
let num--echo $num
$(())$
#!/bin/bash# 初始化变量
num=5# 自增
num=$((num + 1))# 自减
num=$((num - 1))echo $num
(())
#!/bin/bash# 初始化变量
num=5# 自增
((num++))# 自减
((num--))echo $num

http://www.ppmy.cn/news/1549373.html

相关文章

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…

设计模式之 责任链模式

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,旨在将多个处理对象通过链式结构连接起来,形成一条处理请求的链条。每个处理对象都有机会处理请求,或者将请求传递给链中的下一个对象。这样&#x…

蓝桥杯某C语言算法题解决方案(质因数分解)

蓝桥杯原题:将一个正整数分解质因数例如:输入90,打印出90 2 * 3 * 3 * 5。 声明:该题目是否为蓝桥杯原题未知,我是从CSDN上面查到的,仅对该题目进行解决。 这个题与我之前发表过的一些关于检验一个数字是…

iOS无人直播虚拟视频实用版

iOS无人直播虚拟视频实用版 资源描述 本资源提供了一个名为“iOS无人直播虚拟视频实用版”的资源文件,该文件允许用户在iOS设备上实现无人直播功能,通过虚拟视频技术播放指定的视频内容。该资源文件特别适用于需要进行刷脸验证的场景,用户可…

windows已建立威胁IP排查

在应急响应的时候,需要筛选出服务器建立连接的进程、PID,此代码可满足该需求实现共计2步 首先windos netstat-ano > all.txt, 上传至pycharm路径 第一步获取服务器建立连接的ip import re# 从文件读取 netstat 输出 def read_netstat_f…

【Flask+Gunicorn+Nginx】部署目标检测模型API完整解决方案

【Ubuntu 22.04FlaskGunicornNginx】部署目标检测模型API完整解决方案 文章目录 1. 搭建深度学习环境1.1 下载Anaconda1.2 打包环境1.3 创建虚拟环境1.4 报错 2. 安装flask3. 安装gunicorn4. 安装Nginx4.1 安装前置依赖4.2 安装nginx4.3 常用命令 5. NginxGunicornFlask5.1 ng…

干货分享|分布式数据科学工具 Xorbits 的使用

本章介绍分布式数据科学工具 Xorbits 。 1 Xorbits Data Xorbits Data 是一个面向数据科学的分布式计算框架,功能类似于 Dask 和 Modin,用于加速 Pandas DataFrame 和 NumPy。Xorbits Data 通过切分大数据集并利用 Pandas 或 NumPy 执行操作。其底层采…

java Queue 详解

Java Queue 详解 Queue 是 Java 集合框架中用于实现 队列 数据结构的接口,位于 java.util 包中。队列是一种 先进先出(FIFO) 的数据结构,元素按照插入的顺序依次出队。 1. Queue 的基本特性 FIFO(First-In-First-Out&…