shell:基础
本文主要探讨shell相关知识。
变量
$? 上一次执行命令返回状态
$$ 当前进程进程号
$! 后台运行的最后一个进程的进程号
$# 位置参数的数量
$* 参数内容
$@ 参数内容
$@和$*解析"hello word"为"hello" "word"
"$@"解析"hello word"为"hello word"
"$*"解析"hello word"为"hello" "word"
RANDOM随机数
常用环境变量(env):USER UID HOME HOSTNAME PWD PS1 PATH
${#var} 返回var字符串长度
${var:n-m} 返回截取的var
${var:index:n} 返回从index开始的n个长度的字符
${var#str} 返回从左边删除str后的字符串(短匹配)(var=http://127.0.0.1/index.html,${var#*/} => /127.0.0.1/index.html)
${var##str} 返回从左边删除str后的字符串(长匹配)(var=http://127.0.0.1/index.html,${var##*/} => index.html)
${var%str} 返回从右边删除str后的字符串(短匹配)(var=http://127.0.0.1/index.html,${var%/*} => http://127.0.0.1)
${var%%str} 返回从右边删除str后的字符串(长匹配)(var=http://127.0.0.1/index.html,${var%%/*} => http:)
${var:-str} var为空或未设置返回str,var不为空返回var
${var:=str} var为空或未设置返回str且var=str,var不为空返回var
${var:+str} var为空返回空,var不为空返回str
${var:?str} var为空或未设置str写入STDERR,var不为空返回var
${var/str/new} 返回第一个str替换为new_str的var
${var//str/new} 返回第str全替换为new_str的var
运算
$(()) echo $(( 5+2-(3*2)/5 ))
$[] echo $[ 5 + 2 - (3*2)/5 ]
echo "2*4" | bc
echo "2^4" | bc
echo "scale=2;6/4" | bc
scale: 精度
输入
read -p "提示" -s "加密信息不输出" -t 超时时间 var
cat >> file.txt <<EOF
...
...
...
EOF
运行
./scripts 当前shell执行
source scripts 当前shell执行
bash scripts 子shell执行
sh –x script 执行该脚本并显示所有变量
sh –n script 检查语法模式
sh –v script 执行并容显示脚本内容
basename & dirname
basename 保留文件名
dirname 保留文件路径
流控
-n STRING 字符串长度不为0
-z STRING 字符串长度为0
STRING1 = STRING2 字符串是否相同
STRING1 != STRING2 字符串是否不同
-f 存在且是普通文件
-d 存在且是目录
-h 存在且是符号链接
-a && 逻辑与
-o || 逻辑或
shift 位置参数左移(shift 3表示$1的值变为$4的值,默认左移1)
break 跳出本次循环
continue 进入下一轮循环
exit 退出脚本
if [ ... ]
then...
elif [ ... ]
then...
else...
fi
case $var inpattern1)...;; pattern2)...;; *)...;;
esac
for i in {list}
do ...
done
for (( i=1;i <= 5;i++ ))
do...
done
while [ condation ]
do...
done
until [ condation ] #为假进行循环
do..
done
函数
function func() {} 函数声明
func 1 2 3 传参调用
unset func 取消函数
数组
os=(linux windows harmoneys) 定义数组
os=(${list} ...) 定义数组(可追加元素)
os [0]=linux; os [1]=windows;定义数组(可追加元素)
declare -a num=(5 6 7 8) 定义数组
${os[0]} 引用数组
${os[@]} == ${aa[*]} 数组所有内容(区别同$@和$*)
${#os[@]} 元素个数
${!aa[@]} 显示下标
${arry[@]/str/new} 临时替换
arry=(${arry[*]/str/new}) 永久替换
正则表达式
^ 行首定位符 ^cxb => 以cxb开头行
$ 行尾定位符 cxb$ => 以cxb结束行
. 匹配单字符 c.b => 匹配c某b
* 匹配字符0到n次 c*b => 匹配cb,c某某某...b
[] 匹配任一字符 c[xX]b => 匹配cxb,cXb
[ - ] 匹配范围内任一字符 c[a-z]b => cab...czb
[^] 匹配非范围字符 c[^a-z]b => c1b...
\< 词首定位(由数组或字母组成) \<[cC]xb => cxb,Cxb
\> 词尾定位符号 cx[bB]\> => cxb,cxB
+ 匹配一或多个字符
? 匹配零或一个字符
() 匹配括号中全部字符
{m} 字符重复m次 cx{2}b => cxxb
{,m} 字符重复最多m次 cx{,2}b => cb,cxb,cxxb
{m,} 字符重复至少m次 cx{2,}b => cxxb,cxxxb...
{m,n} 字符重复m到n次 cx{1,2}b => cxb,cxxb
sed
-f 编辑脚本
sed 's/str/new/ ; s/string/new/' file
sed -f sc file
sc == s/str/new/ \n s/string/new/
删除第n-m行
sed 'n,md' file
删除第n行到最后一行
sed 'n,$d' file
删除匹配cxb
sed '/cxb/d' file
删除匹配到cxb行到m行
sed '/cxb/,md' file
删除奇数行
sed '1~2d' file
删除偶数行
sed '0~2d' file
i匹配忽略大小写
匹配n次的str被替换
sed 's/str/new/ngi' file
匹配前加行
sed '/cxb/a\hello/' file
匹配后加行
sed '/cxb/i\hello /' file
awk
awk工作原理
awk -F ":" 'BEGIN{echo "start"}{print $1,$3}END{echo "end"}' file
-F输入分隔符
OFS输出分隔符,默认为空格
NR行号
NF列号
打印指定行列字符
awk -F":" 'NR==3{ print $7 }' file
expect
set timeout n 设置超时时间ns
spawn 传递交互命令
send 执行交互动作
expect eof 交互结束
interact 保持交互状态,否则交互完退出
exp_continue 继续执行
demo:
exprct,正则
test.sh
#!/bin/bashexpect_test()
{/usr/bin/expect <<EOFset user [ lindex $argv 0 ]set pass [ lindex $argv 1 ]set ip [ lindex $argv 2 ]set timeout 3spawn ssh -l kaxi 192.168.200.183 expect {"yes/no" { send "yes";exp_continue }"password:" { send "123456\r" }}expect "$"send "echo \"cxb\" \r"send "exit\r"expect eof
EOF
}expect_test ${1} ${2} ${3}num=27.27 && [[ $num =~ ^[0-9]+\.[0-9]+$ || $num =~ ^[0-9]+$ ]] && echo \"yes\" || echo \"no\"
结果示例:
相关文章:

shell:基础
本文主要探讨shell相关知识。 变量 $? 上一次执行命令返回状态 $$ 当前进程进程号 $! 后台运行的最后一个进程的进程号 $# 位置参数的数量 $* 参数内容 $ 参数内容 $和$*解析"hello word"为"hello" "word" "$"解析"hello word&…...

【JVM】万字总结GC垃圾回收
【JVM】GC垃圾回收 概念 在程序运行过程中,会不断创建对象来使用内存,当这些对象不再被引用时,其所占用的内存若不及时释放,会导致内存占用不断增加,最终可能引发内存溢出。GC 机制能自动检测并回收这些不再使用的对…...

内网横向之RDP缓存利用
RDP(远程桌面协议)在连接过程中会缓存凭据,尤其是在启用了 "保存密码" 或 "凭据管理器" 功能时。这个缓存的凭据通常是用于自动填充和简化后续连接的过程。凭据一般包含了用户的用户名和密码信息,或者是经过加…...

【Linux网络】传输层TCP协议
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12891150.html 目录 TCP 协议 TCP 协议段格式 确认应答(ACK)机制 超时重传机制 连接管理机制 …...

不同视角理解三维旋转
在二维空间中,绕任意点旋转可以分解为: 1)平移旋转点到原点,2)绕原点旋转,3)逆平移旋转点; 可用矩阵表示为 , 其中, 表示绕原点旋转 , 为平移矩…...

Adobe Acrobat——设置PDF打印页面的大小
1. 打开 PDF 文件; 2. 点击菜单栏的 “文件” → “打印”; 3. 在打印对话框中,点击 “属性”; 4. 点击 “布局”→ “高级”; 5. 点击 “纸张规格”,选择 “PostScript 自定义页面大小”,然后…...
Android apk装机编译类型: verify、speed-profile, speed与启动耗时
Android apk装机编译类型: verify、speed-profile, speed与启动耗时 Dex2oat (dalvik excutable file to optimized art file) ,对 dex 文件进行编译优化,Android 虚拟机可识别的是dex文件,应用运行过程如果每次都将dex文件加载内存ÿ…...
纹理压缩格式优化
🎯 Unity 项目纹理压缩格式优化终极指南 ——不同平台、不同手机型号,如何正确选择 🧩 什么是纹理压缩(Texture Compression)? Texture压缩 = 减小显存占用,提升加载速度,减轻GPU负担纹理是游戏中最大资源,占用50%+内存正确压缩:减少GPU Bandwidth,提高渲染性能错…...

使用Virtual Serial Port Driver+com2tcp(tcp2com)进行两台电脑的串口通讯
使用Virtual Serial Port Drivercom2tcp或tcp2com进行两台电脑的串口通讯 问题说明解决方案方案三具体操作流程网上教程软件安装拓扑图准备工作com2tcp和tcp2com操作使用串口助手进行验证 方案三存在的问题数据错误通讯延时 问题说明 最近想进行串口通讯的一个测试,…...
【从0-1的HTML】第3篇:html引入css的3种方式
文章目录 HTML中引入CSS的方式行内样式内部样式外部样式yinru.css文件 完整html文件 引入CSS方式的优先级 HTML中引入CSS的方式 HTML:是使用标签来描述网页元素 CSS:是Cascading Style Sheets,层叠样式表,用来控制样式来显示网页…...

数智破局·生态共生:重构全球制造新引擎 2025 WOD制造业数字化博览会即将在沪盛大启幕
共探数智化未来,共创新质生产力。2025年6月17日—19日,上海浦东新国际博览中心将迎来全球制造业数字化转型的盛会——WOD制造业数字化博览会。作为全球首个聚焦制造业数字化全场景的专业展会,本届展会以“数智破局生态共生:重构全…...
machine_env_loader must have been assigned before creating ssh child instance
在主机上执行roslaunch命令时,报错:machine_env_loader must have been assigned before creating ssh child instance。 解决办法: 打开hostos文件,检查local host 前的内部ip是否正常。操作示例: 先输入下方指令打…...

BGP/MPLS IP VPN跨域解决方案
目录 MPLS VPN跨域方案出现背景: MPLS VPN回顾 VRF(Virtual Route Forward)虚拟路由转发 MPLS(Multiple Protcol Label Swtich)多协议标签交换 MP-BGP多协议BGP MPLS VPN跨域OptionA 控制平面: 转发平面: 总结: 挑战: MPLS VPN跨域OptionB 非RR场景: 控制平面: 转发…...
C语言-10.字符串
10.1字符串 10.1-1字符串 字符数组 char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; word[0]Hword[1]eword[2]lword[3]lword[4]oword[5]!这不是C语言的字符串,因为不能用字符串的方式做计算 字符串 char word[] = {‘H’,‘e’,‘l’,‘l’,‘o’,‘!’}; word[0]Hwo…...

backend 服务尝试连接 qdrant 容器,但失败了,返回 502 Bad Gateway 问题排查
遇到的问题是: backend 报错:502 Bad Gateway 来自 Qdrant → 导致接口 /api/chat 返回 500 Internal Server Error并且日志中提示: QDRANT_URL http://qdrant:6333✅ 问题分析 这个错误的根本原因是: 你的 backend 服务尝试连…...
硬件学习笔记--66 MCU的DMA简介
DMA(Direct Memory Access,直接存储器访问)是MCU中一种重要的数据传输机制,它允许外设与存储器之间或存储器与存储器之间直接传输数据,而无需CPU的持续干预。 1、DMA的基本原理 1.1 核心概念: 1…...

18. Qt系统相关:多线程
一、概述 在Qt中,使用QThread类对系统线程进行了封装。QThread代表一个在应用程序中可独立控制的线程,也可以和进程中的其他线程共享数据。 二、QThread常用API 三、QThread使用 自定义一个类,继承自QThread,并且只有一个线程处…...

6个月Python学习计划 Day 14 - 异常处理基础( 补充学习)
第二周 Day 8 - Python 函数基础 Day 9 - 函数进阶用法 Day 10 - 模块与标准库入门 Day 11 - 列表推导式、内置函数进阶、模块封装实战 Day 12 - 字符串处理 & 文件路径操作 Day 13 - 文件操作基础 🎯 今日目标 理解异常的概念和常见异常类型掌握 try-except …...

使用jstack排查CPU飙升的问题记录
最近,看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣,参考了视频博主的流程,自己做了下对应案例的实战演练,在此,想做一下,针对相关问题模拟与排查演练的实战过程记录。 案例中…...

cursor如何开启自动运行模式
在Cursor中,开启自动运行模式即启用“Yolo Mode”,具体操作如下: 按下Ctrl Shift J(Windows/Linux)或Cmd Shift J(Mac)打开Cursor设置。导航到“Features”(功能)选…...

SecureCRT 设置超时自动断开连接时长
我们在使用SecureCRT 连接服务器时,经常性出现2分钟未操作已连接的服务器,就会自动断开连接,此时需要重新连接,非常影响服务器操作,本文可以很好带领大家解决这种问题。...
《复制粘贴的奇迹:原型模式》
📖 背景故事 创业初期,小明每天加班写配送路线、配送策略、营销套餐。可当业务做大后,他发现大家常常下单“上次那个套餐”—— “老板,再来一个上次的奶茶水果!” “老样子,照搬昨天晚上的宵夜套餐&#…...

IEC 61347-1:2015 灯控制装置安全标准详解
IEC 61347-1:2015灯控制装置安全标准详解 IEC 61347-1:2015 是国际电工委员会(IEC)发布的灯控制装置第1部分:通用要求和安全要求的核心标准,为各类照明用电子控制设备设定了全球通用的安全基准。该标准适用于独立式或内置于灯具/…...

Ansys Zemax | 手机镜头设计 - 第 4 部分:用 LS-DYNA 进行冲击性能分析
附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战,从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分,它涵盖了相机镜头的显式动态模拟,以及对光学性能的影响。使用 Ansys Mechanical 和 LS - DY…...
[蓝桥杯]实现选择排序
实现选择排序 题目描述 实现选择排序算法。介绍如下: 选择排序的工作原理是每一次从需要排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排列完毕。 请编写代码,完成选择排序,…...

[蓝桥杯]卡片换位
卡片换位 题目描述 你玩过华容道的游戏吗? 这是个类似的,但更简单的游戏。 看下面 3 x 2 的格子 --------- | A | * | * | --------- | B | | * | --------- 在其中放 5 张牌,其中 A 代表关羽,B 代表张飞,* …...

【论文笔记】High-Resolution Representations for Labeling Pixels and Regions
【题目】:High-Resolution Representations for Labeling Pixels and Regions 【引用格式】:Sun K, Zhao Y, Jiang B, et al. High-resolution representations for labeling pixels and regions[J]. arXiv preprint arXiv:1904.04514, 2019. 【网址】…...

【题解-洛谷】P9422 [蓝桥杯 2023 国 B] 合并数列
题目:P9422 [蓝桥杯 2023 国 B] 合并数列 题目描述 小明发现有很多方案可以把一个很大的正整数拆成若干正整数的和。他采取了其中两种方案,分别将他们列为两个数组 { a 1 , a 2 , ⋯ a n } \{a_1, a_2, \cdots a_n\} {a1,a2,⋯an} 和 { b 1 , …...
在MATLAB中,`mean(P_train, 2)` 的含义
在MATLAB中,mean(P_train, 2) 的含义是: 计算矩阵 P_train 中每一行的平均值(沿第2个维度操作)。 详解: mean(A, dim) 函数: 对数组 A 沿维度 dim 求平均值。dim1 → 按列计算(返回行向量&…...
开源模型应用落地-OpenAI Agents SDK-集成Qwen3-8B(一)
一、前言 在人工智能技术迅猛发展的今天,OpenAI Agents SDK 为开发者提供了一个强大的工具集,用于构建基于 Python 的智能代理应用。这些代理可以执行从简单任务到复杂决策的一系列操作,极大地提升了应用程序的智能化水平。 通过 OpenAI Agents SDK,可以利用 Python 编程语…...