Linux中的shell脚本
什么是shell脚本
- shell脚本是文本的一种
- shell脚本是可以运行的文本
- shell脚本的内容是由逻辑和数据组成
- shell脚本是解释型语言
用file命令可以查看文件是否是一个脚本文件
file filename
脚本书写规范
注释
单行注释
使用#号来进行单行注释
多行注释
使用
: "
注释内容
注释内容
注释内容
"
注意:冒号后面有空格
注意
在.vimrc里面注释行时
用的是"
vim用于书写脚本的设定
ts:tab键的大小
sw:缩进大小
ai:自动缩进
et:将tab键补齐的大空格拆分成小空格
注:当你规定了tab键的大小时,再规定sw的缩进大小将不生效
用vim编辑这个配置文件
vim ~/.vimrc
自动添加新创建的特定文件的预定内容
也是编写这个配置文件
vim ~/.vimrc
如下代码块
第一行的意思是当新创建一个以.sh或.script时自动执行下面我们自己写的一个SHELLTITLE函数
其中函数中写的是
在第1行(linux中行数从0开始计算,所以代码中写的是0而不是1)添加上“hahahahahahahahaha”这行内容
在第2行添加上日期,其格式为年/月/日
autocmd BufNewFile *.sh,*.script call SHELLTITLE()
func SHELLTITLE()call append(0,"hahahahahahahahaha")call append(1,"# Date: ".strftime("%Y/%m/%d"))
endfunc
检验效果
以.sh结尾的新文件会自动添加
以.script结尾的新文件
也会自动添加
如果不是以.sh或.script结尾的新文件
也是不会自动添加的
脚本执行方法
创建了一个新脚本文件
里面编写的内容
注:没有可执行权限
在没有可执行权限时
. 脚本
. 脚本
source 脚本
source 脚本
sh 脚本
sh 脚本
当有可执行权限时
./脚本
./脚本
直接执行脚本的绝对路径
脚本的绝对路径
脚本调试
写一个手残脚本
其中cat处本应该是cal
运行手残脚本
会发现被卡住了
假装排查代码眼残也没发现问题哈哈哈哈
那么我们就可以用sh -x 来执行脚本
调试脚本
sh -x 脚本
这次可以清楚的看到卡在了哪一步
这样对我们的脚本排错有很大的作用
然后我们改一下我们的脚本
脚本在指定环境中运行
. 脚本
source 脚本
直接执行脚本的绝对路径 会直接新开bash来执行脚本
exit值
查看退出值
echo $?
退出值0为正常退出,非0值都是错误退出,不正常。
修改退出值
exit 你想要的退出值
打印文本
cat&tac
正向打印&反向打印
seq
注:只能打数字
seq 1 3
#打印1到3
seq 2 2 10
#打印2到10 步长为2
seq 1 2 10
#打印1到10 步长为2
echo
echo 123
echo "hello world"echo -n "hello world" //不换行打印echo -e "hello\tworld" //解析转义字符
printf
printf "hello vb" //不换行打印
printf "hello vb\n" //换行打印printf "3%%" //打印百分号printf "%0.1f" "3.141592653579" //保留一位小数
printf "%0.2f" "3.141592653579" //保留两位小数
printf "%0.3f" "3.141592653579" //保留三位小数
printf "%.3f" "3.141592653579" //保留三位小数
printf "%.2f" "3.141592653579" //保留两位小数
printf "%.1f" "3.141592653579" //保留一位小数
printf "%.0f" "3.141592653579" //取整数
注:保留几位小数都是会四舍五入的
uniq
对于命令输出的字符冗余部分进行处理
注:只对有排序后的文件有用
vb里有实验素材,就是这些无序的数字
-d #显示重复的行
sort -n vb | uniq -d
-u #显示唯一的行
sort -n vb | uniq -u
-c #合并重复并统计重复个数
sort -n vb | uniq -c
cut
用户对字符的截取
生成实验文件,我是从/etc/passwd中复制出来的
cut -d : -f 1 ./test
指定分割符为 : 指定显示的列为第1列 对当前目录下的test文件作用
指定分割符为 : 指定显示的列为第1列到第3列 对当前目录下的test文件作用
cut -d : -f 1-3 ./test
指定分割符为 : 指定显示的列为第3列到最后一列 对当前目录下的test文件作用
cut -d : -f 3- ./test
指定分割符为 : 指定显示的列为第1列和第3列 对当前目录下的test文件作用
cut -d : -f 1,3 ./test
第一个字符到第四个字符
cut -c 1-4 ./test
第一个字符和第四个字符
cut -c 1,4 ./test
首字符到第八个字符
cut -c -8 ./test
第八个字符到末尾字符
cut -c 8- ./test
xargs
xargs 命令作用是将标准输入数据转换成命令行参数,能够处理管道或者标准输入并将其转换成特定命令的命令参数
原本echo的输出通过管道给touch是不能进行生成文件的操作的
所以我们需要用xargs来承接给touch(等那些不能直接接返回输出进行操作的命令)命令
echo /mnt/vb{1..3} | xargs touch
多行输入单行输出
xargs < ./vb
指定每行输出个数
xargs -n 3 < ./vb
-n 3就是指定每行输出个数为3个
指定分隔符
echo "vb:vb:vb" | xargs -d :
指定的是:,输出时将删除分隔符再输出
echo "aaa:abc:cba:bba" | xargs -d a
同样如果用了字符a来进行分割的话,可以看到下方效果显示,将所有的字符a删去空位符替代并输出
用字符代替接收值
ls /mnt/* | xargs -I word rm -fr word
转义
在shell中有很多本身有特殊功能的字符,比如空格井号等等
如果在给变量赋值或执行命令使用时我们只想使用这些符号本身那么就需要用到转义或引用
在shell中反斜杠表示转义,每个反斜杠只能转义一个字符
在shell中单引号表示强引用,我们可以把它看作批量转义,在单引号内的所有字符被视为字符本身
在shel中双引号表示弱引用,其和单引号的区别在于不能引用(\!$)
单个转义和多个转义
单个转义
可以用\
echo #helloworldecho \#helloworld
当我们需要转义一串字符中含有空格断开的一个井号时
我们需要用到多个转义
"XXXXXXXXX"
注:要想打出\,则需要用'\',而不是"\"
同样的$,需要'$'才能转义,而"$"会被注释
变量
如果没加local参数
环境级别变量只在当前运行的shell中生效,shell关闭变量被释放
用户级变量只有登录系统的指定用户,此变量才生效
系统级变量是系统中的永久设定,所有用户都可以使用,系统变量通常被保存到/etc/profile中
相关文章:

Linux中的shell脚本
什么是shell脚本 shell脚本是文本的一种shell脚本是可以运行的文本shell脚本的内容是由逻辑和数据组成shell脚本是解释型语言 用file命令可以查看文件是否是一个脚本文件 file filename 脚本书写规范 注释 单行注释 使用#号来进行单行注释 多行注释 使用 : " 注释内容…...

dvwa3——CSRF
LOW: 先尝试change一组密码:123456 修改成功,我们观察上面的url代码 http://localhost/DVWA/vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange# 将password_new部分与password_conf部分改成我们想要的…...

【学习笔记】Transformer
学习的博客(在此致谢): 初识CV - Transformer模型详解(图解最完整版) 1 整体结构 Transformer由Encoder和Decoder组成,分别包含6个block。 Transformer的工作流程大体如下: 获取每个单词的em…...

欢乐熊大话蓝牙知识12:用 BLE 打造家庭 IoT 网络的三种方式
🏠 用 BLE 打造家庭 IoT 网络的三种方式 不止是“蓝牙耳机”,BLE 还能把你家“点亮成精”! 👋 前言:BLE 不只是蓝牙耳机的“代名词” 蓝牙?很多人一听就联想到“耳机连接失败请重试”。但你知道吗?现在 BLE(Bluetooth Low Energy)在智能家居中已经偷偷搞起了大事情。…...

02.上帝之心算法用GPU计算提速50倍
本文介绍了上帝之心的算法及其Python实现,使用Python语言的性能分析工具测算性能瓶颈,将算法最耗时的部分重构至CUDA C语言在纯GPU上运行,利用GPU核心更多并行更快的优势显著提高算法运算速度,实现了结果不变的情况下将耗时缩短五…...

MES管理系统:Java+Vue,含源码与文档,实现生产过程实时监控、调度与优化,提升制造企业效能
前言: 在当今竞争激烈的制造业环境中,企业面临着提高生产效率、降低成本、提升产品质量以及快速响应市场变化等多重挑战。MES管理系统作为连接企业上层计划管理系统与底层工业控制之间的桥梁,扮演着至关重要的角色。它能够实时收集、分析和处…...

LeetCode算法题 (搜索二维矩阵)Day18!!!C/C++
https://leetcode.cn/problems/search-a-2d-matrix/description/ 一、题目分析 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 ta…...

VectorStore 组件深入学习与检索方法
考虑到目前市面上的向量数据库众多,每个数据库的操作方式也无统一标准,但是仍然存在着一些公共特征,LangChain 基于这些通用的特征封装了 VectorStore 基类,在这个基类下,可以将方法划分成 6 种: 相似性搜…...

HackMyVM-First
信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-05-31 06:13 EDT Nmap scan report for 192.168.43.1 Host is up (0.0080s latency). MAC Address: C6:45:66:05:91:88 (Unknown) …...
30V/150A MOSFET 150N03在无人机驱动动力系统中的性能边界与热设计挑战
产品技术概述 150N03 是一款基于沟槽式工艺(Trench Technology)的N沟道功率MOSFET,其核心价值在于: 电压/电流规格:VDSS30V, ID150A (Tc25℃) 工艺特征:高密度元胞设计实现超低导通电阻 双面散热架构:顶部裸露铜架底…...
数据共享交换平台之数据资源目录
依据信息资源体系规范,构建多维度、多层级的资源目录体系,完整的展示和管理资源目录。资源目录提供以下功能: 多层级资源目录展示,能够将资源目录按照技术维度和管理维度进行分类管理,并能够将资源目录按照数据湖、基础…...

跨平台浏览器集成库JxBrowser 支持 Chrome 扩展程序,高效赋能 Java 桌面应用
JxBrowser 是 TeamDev 开发的跨平台库,用于在 Java 应用程序中集成 Chromium 浏览器。它支持 HTML5、CSS3、JavaScript 等,具备硬件加速渲染、双向 Java 与 JavaScript 连接、丰富的事件监听等功能,能处理网页保存、打印等操作,助…...

WEBSTORM前端 —— 第3章:移动 Web —— 第3节:移动适配
目录 一、移动Web基础 1.谷歌模拟器 2.屏幕分辨率 3.视口 4.二倍图 二、适配方案 三、rem 适配方案 四、less 1.less – 简介 2.less – 注释 3.less – 运算 4.less – 嵌套 5.less – 变量 6.less – 导入 7.less – 导出 8.less – 禁止导出 五…...
38.springboot使用rabbitmq
pom依赖 <!--amqp依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 配置文件添加 spring:application:name: message…...

弱光环境下如何手持相机拍摄静物:摄影曝光之等效曝光认知
写在前面 博文内容为一次博物馆静物拍摄笔记的简单总结内容涉及:弱光环境拍摄静物如何选择,以及等效曝光的认知理解不足小伙伴帮忙指正 😃,生活加油 我看远山,远山悲悯 持续分享技术干货,感兴趣小伙伴可以关注下 _ 采…...
Selenium Manager中文文档
1. 什么是 Selenium Manager(测试版) Selenium Manager 是 Selenium 官方提供的命令行工具(用 Rust 实现),用于自动管理浏览器及其驱动(chromedriver、geckodriver、msedgedriver 等)。从 Sele…...
WEB安全--SQL注入--MSSQL注入
一、SQLsever知识点了解 1.1、系统变量 版本号:version 用户名:USER、SYSTEM_USER 库名:DB_NAME() SELECT name FROM master..sysdatabases 表名:SELECT name FROM sysobjects WHERE xtypeU 字段名:SELECT name …...

【HTML】基础学习【数据分析全栈攻略:爬虫+处理+可视化+报告】
- 第 102 篇 - Date: 2025 - 05 - 31 Author: 郑龙浩/仟墨 文章目录 HTML 基础学习一 了解HTML二 HTML的结构三 HTML标签1 标题2 文本段落3 换行4 加粗、斜体、下划线5 插入图片6 添加链接7 容器8 列表9 表格10 class类 HTML 基础学习 一 了解HTML 一个网页分为为三部分&…...
SAP Business ByDesign:无锡哲讯科技赋能中大型企业云端数字化转型
云端ERP时代,中大型企业的智能化引擎 在数字经济高速发展的今天,中大型企业面临着全球化竞争、供应链复杂化、数据安全等多重挑战。传统的本地化ERP系统已无法满足企业快速响应市场变化的需求,而SAP Business ByDesign(ByD&…...
华为OD机考2025B卷 - 无向图染色(Java Python JS C++ C )
最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 给一个无向图染色,可以填红黑两种颜色,必须保证相邻两个节点不能同时为红色,输出有多少种不同的染色方案? 输入描述 第一行输入M(图中节点数) N(边数) 后续N行格式为:V1 V2表示…...
计算机网络学习20250528
地址解析协议ARP 实现IP地址和Mac地址的转换 ARP工作原理: 每台主机或路由器都有一个ARP表,表项:<IP地址,Mac地址,TTL>(TTL一般为20分钟) 主机产生ARP查询分组,包含源目的IP地…...

Next.js路由导航完全指南
在前端框架(如 React、Vue 等)或移动端开发中,路由系统是实现页面 / 界面导航的核心机制。Next.js 采用 文件系统路由(File System Routing),即根据项目目录结构自动生成路由。 Next.js 目前有两套路由解决…...

五、web安全--XSS漏洞(1)--XSS漏洞利用全过程
本文章仅供学习交流,如作他用所承受的法律责任一概与作者无关1、XSS漏洞利用全过程 1.1 寻找注入点:攻击者首先需要找到目标网站中可能存在XSS漏洞的注入点。这些注入点通常出现在用户输入能够直接输出到页面,且没有经过适当过滤或编码的地方…...

【C++高级主题】命令空间(六):重载与命名空间
目录 一、候选函数与命名空间:重载的 “搜索范围” 1.1 重载集的构成规则 1.2 命名空间对候选函数的隔离 二、重载与using声明:精准引入单个函数 2.1 using声明与重载的结合 2.2 using声明的冲突处理 三、重载与using指示:批量引入命名…...
利用 Python 爬虫获取淘宝商品详情
在电商领域,淘宝作为中国最大的在线零售平台,拥有海量的商品信息。对于开发者、市场分析师以及电商研究者来说,能够从淘宝获取商品详情信息,对于市场分析、价格比较、商品推荐等应用场景具有重要价值。本文将详细介绍如何使用 Pyt…...
动态拼接内容
服务器端模板引擎(Server-Side Template Engine) 的特性,比如 JSP(Java Server Pages)、ASP.NET、PHP 等技术中常用的 <% %> 语法。 它的核心作用是: 动态拼接内容:在 HTML 中嵌入编程语…...

Tomcat运行比较卡顿进行参数调优
在Tomcat conf/catalina.bat或catalina.sh中 的最上面增加参数 1. 初步调整参数(缓解问题) set JAVA_OPTS -Xms6g -Xmx6g -Xmn3g # 增大新生代,减少对象过早晋升到老年代 -XX:MetaspaceSize256m -XX:MaxMetaspaceS…...
java直接获取MyBatis将要执行的动态sql命令(不是拦截器方式)
目录 前言 一. 准备数据 1. 传输过来的json条件数据 2. mybatis 配置的动态sql 3. 想要的最终会执行的sql并返回给页面展示 二. 实现方式 三. 最终代码 前言 1.在平常开发过程中,MyBatis使用时非常多的,一般情况下我们只需要在控制台看看MyBatis输出的日志,要不就是实…...

C++四种类型转换方式
const_cast,去掉(指针或引用)常量属性的一个类型转换,但需要保持转换前后类型一致static_cast,提供编译器认为安全的类型转换(最常使用)reinterpret_cast,类似于c语言风格的强制类型转换,不保证安全;dynamic_cast,主要用于继承结构中…...

Canvas: trying to draw too large(256032000bytes) bitmap.
1、错误展示 测试了一下一张图片的显示,发现二个手机上测试的结果不一样,配制好一些的手机,直接就通过,但是屏小一些的测试手机上,直接报下面的错误。 这个意思是图片太大了,直接就崩了。 2、代码编写 lo…...