The Missing Semester ( Shell 工具和脚本 和 Vim)
管道符号
(1)管道符号 |
将前一个命令的输出作为下一个命令的输入
例如:
以下为 ./semester输出中提取包含 "Last-Modified" 的行并写入文件 last-modified.txt./semester | grep "Last-Modified" > ~/last-modified.txt
shell
1. Shell 脚本基础操作
(1)变量赋值和引用
-
注意:不要在变量赋值时使用空格 正确: foo=bar错误: foo = bar。
-
引用变量时,需要在变量名前加上美元符号 $。这会告诉 Bash 解释器去获取变量的值。$foo
特殊变量:
#!/bin/bash# 特殊变量示例和说明# 退出状态码 ($?)
# $? 表示上一个命令的退出状态码
echo "Running 'ls /' command"
ls /
echo "退出状态码是: $?"echo "Running 'ls /nonexistent' command"
ls /nonexistent
echo "退出状态码是: $?"echo# 进程ID ($$) 和 父进程ID ($PPID)
# $$ 表示当前脚本的进程ID
# $PPID 表示当前脚本的父进程ID
echo "当前脚本的进程ID是: $$"
echo "当前脚本的父进程ID是: $PPID"echo# 脚本参数 ($0, $1, $2, ..., $#)
# $0 表示脚本名
# $1, $2, ... 表示脚本参数
# $# 表示脚本参数个数
# $@ 表示所有脚本参数(列表)
# $* 表示所有脚本参数(作为一个字符串)
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "参数个数: $#"
echo "所有参数 (列表): $@"
echo "所有参数 (字符串): $*"echo# 遍历所有参数
for arg in "$@"; doecho "参数: $arg"
done
(2)字符串
单引号 ':不转义变量,例如 '$foo' 输出 $foo。双引号 ":会转义变量,例如 "$foo" 输出 bar(假设 foo=bar)。
(3)控制流
(1)数值比较符
-eq 等于 equal-ne 不等于 not equal-gt 大于 greater than-ge 大于或等于 greater than or equal-lt 小于 less than-le 小于或等于 less than or equal
(2)字符串比较操作符
[ -z "$a" ] # 如果字符串 a 的长度为 0
[ -n "$a" ] # 如果字符串 a 的长度非 0
(3)文件比较操作符
[ -e "$file" ] # 如果文件存在[ -f "$file" ] # 如果是一个普通文件[ -d "$file" ] # 如果是一个目录[ -s "$file" ] # 如果文件非空[ -r "$file" ] # 如果文件可读[ -w "$file" ] # 如果文件可写[ -x "$file" ] # 如果文件可执行
(4)条件判断 (if
, else if
, else
)
if
语法:if [ condition ]; then ... fi
else if
语法:elif [ condition ]; then ... fi
else
语法:else ... fi
#!/bin/bash
read -p "输入文件路径: " filepath
if [ -e $filepath ]; thenif [ -f $filepath ]; thenecho "这是一个普通文件"elif [ -d $filepath ]; thenecho "这是一个目录"elseecho "这是其他类型的文件"fi
elseecho "文件不存在"
fi
(5)循环 (for
, while
, until
)
for
语法:for var in list; do ... done
while
语法:while [ condition ]; do ... done
until
语法:until [ condition ]; do ... done
#!/bin/bash
for i in {1..10}; doecho $i
done#!/bin/bash
sum=0
i=0
while [ $i -lt 100 ];doi=$((i + 1))sum=$((sum + i))
done
echo "结果为$sum"
(4)命令替换
$(CMD):执行命令 CMD 并用其输出替换。echo "Starting program at $(date)"
(5)通配(Globbing)
(1)通配符
- 星号
*
:匹配任意数量的字符(包括零个字符)。- 问号
?
:匹配任意一个字符。
示例:*.txt:匹配当前目录下所有扩展名为 .txt 的文件。file?.txt:
匹配 file1.txt、file2.txt,但不匹配 file10.txt(因为 ? 只匹配一个字符)。
(2)花括号
{}
用于展开命令花括号扩展是一种用于生成一系列字符串的方法.
这会将当前目录下所有扩展名为 .py 和 .sh 的文件移动到 folder 目录。mv *{.py,.sh} folder 分解为 mv *.py *.sh folder
花括号扩展的高级用法:
(1)数字序列:
echo {1..5}
# 输出 1 2 3 4 5
(2)带步长的数字序列:
echo {1..10..2}
# 输出 1 3 5 7 9
(3)字母序列:
echo {a..e}
# 输出 a b c d e
复杂目录结构的创建:
mkdir -p project/{src/{main,test},lib,bin,docs}目录结构:project/
├── bin/
├── docs/
├── lib/
└── src/├── main/└── test/
(6)Shell 脚本中的重定向
(1)标准输入、输出和错误流
- 标准输入(文件描述符 0)。
- 标准输出(文件描述符 1)。
- 标准错误(文件描述符 2)。
#!/bin/bash
echo "这是标准输出"
echo "这是标准错误" >&2
(2)重定向操作符 (>
, >>
, <
)
>
将输出重定向到文件(覆盖)。>>
将输出追加到文件。<
从文件中读取输入。
#!/bin/bash
echo "追加内容" >> output.txt
cat output.txt
(3)文件描述符和重定向 (2>&1
)
2>&1
将标准错误重定向到标准输出。
#!/bin/bash
echo "标准输出" > combined.log# 重定向到标准错误流
echo "标准错误" >&2# >:将标准输出重定向到 output.txt 文件。
# 2>&1:将标准错误重定向到标准输出,因此标准错误也被写入 output.txt 文件。ls /nonexistent > output.txt 2>&1
(7)特殊文件
/dev/null
是一个特殊文件,丢弃所有写入它的数据。- 将不需要的输出重定向到
/dev/null
。
#!/bin/bash
echo "这条信息将被丢弃" > /dev/nullls /nonexistent > /dev/null 2>&1
Shell 工具
find命令
(1)find
命令简介
- 基本语法:
find [path] [expression]
- 默认行为:
find .
(查找当前目录中的所有文件和目录)
(2)按名称搜索
-name
:按名称查找文件。- 通配符:
*
,?
,[ ]
。
查找当前目录下所有txt文件find . -name "file.txt"
(3)按类型搜索
- 使用
-type
过滤文件类型。 - 概念:
-type f
:普通文件。-type d
:目录。
查找当前目录中的所有目录(含子目录find . -type d
(4)按大小搜索
- 阅读: 使用
-size
过滤文件大小。 - 概念:
-size +n
:大于n
块。-size -n
:小于n
块。-size n
:正好n
块。
查找所有大于 1MB 的文件。find . -size +1M
(5)组合条件
- 阅读: 使用
-and
,-or
和-not
组合多个条件。 - 概念:
-and
,-a
:逻辑与。-or
,-o
:逻辑或。-not
,!
:逻辑非。
查找所有大于 1MB 的 .vsix 文件。find . -size +1M -and -name "*.vsix"
(5)执行命令
- 阅读: 使用
-exec
在找到的文件上执行命令。 - 概念:
-exec
:在每个文件上执行一个命令。{}
:当前文件的占位符。\;
:命令的结束符。
查找所有 .txt 文件并删除它们。find . -name "*.txt" -exec rm {} \;
xargs命令
用于将标准输入的数据转化为命令的参数
(1)使用 find
和 xargs
查找并删除文件。
使用 -0
选项,以 null 字符作为输入分隔符
使用 -print0
选项以 null 字符(\0
)分隔每个文件名。
find . -name "*.log" -print0 | xargs -0 rm
(2)使用 find
和 xargs
查找并压缩文件。
find . -name "*.html" -print0 | xargs -0 zip html_files.zip
vim
(1)基本操作
- 尝试退出 Vim,不保存更改:
- 输入
:q
- 输入
:q!
强制退出
- 输入
- 保存并退出:
- 输入
:wq
- 输入
(2)
基本编辑命令
- 删除文本:
- 将光标移到
Delete me
,按dd
删除整行。
- 将光标移到
- 复制和粘贴:
- 将光标移到
Copy me
,按yy
复制整行,按p
在当前行后粘贴。
- 将光标移到
- 撤销和重做:
- 按
u
撤销刚才的粘贴操作,按<C-r>
重做粘贴操作。
- 按
(3)查找和替换
- 查找文本:
- 输入
/Vim
查找Vim
,按n
跳到下一个匹配项。
- 输入
- 替换文本:
- 输入
:%s/Vim/NeoVim/g
替换所有Vim
为NeoVim
。
- 输入
(4)多窗口编辑
- 打开并分割窗口:
- 在 Vim 中输入
:split practice6-2.txt
打开第二个文件并进行水平分割。 - 使用
<C-w>h
和<C-w>j
在窗口间切换。
- 在 Vim 中输入
(5)自定义 Vim
创建 .vimrc 文件并进行基本配置:
vim ~/.vimrcset number " 显示行号
syntax on " 语法高亮
set tabstop=4 " 设置 tab 宽度为 4
set expandtab " 用空格替代 tab
相关文章:
The Missing Semester ( Shell 工具和脚本 和 Vim)
管道符号 (1)管道符号 | 将前一个命令的输出作为下一个命令的输入 例如: 以下为 ./semester输出中提取包含 "Last-Modified" 的行并写入文件 last-modified.txt./semester | grep "Last-Modified" > ~/last-modif…...

【Uniapp微信小程序】自定义水印相机、微信小程序地点打卡相机
效果图 template 下方的image图片自行寻找替换! <template><view><camerav-if"!tempImagePath && cameraHeight ! 0":resolution"high":frame-size"large":device-position"device":flash"f…...
SimPO: Simple Preference Optimization with a Reference-Free Reward
https://github.com/princeton-nlp/SimPO 简单代码 class simpo(paddle.nn.Layer):def __init__(self):super(OrPoLoss, self).__init__()self.loss paddle.nn.CrossEntropyLoss()def forward(self,neg_logit, neg_lab, pos_logit, pos_lab,beta,gamma):neg_logit paddle.n…...

CDH6.3.2安装文档
前置环境: 操作系统: CentOS Linux release 7.7 java JDK : 1.8.0_231 1、准备工作 准备以下安装包: Cloudera Manager: cloudera-manager-agent-6.3.1-1466458.el7.x86_64.rpm cloudera-manager-daemons-6.3.1-1466458.el…...

Java实战入门:深入解析Java中的 `Arrays.sort()` 方法
文章目录 一、方法定义参数说明返回值 二、使用场景三、实现原理四、示例代码示例一:对整型数组排序示例二:对字符串数组排序示例三:对自定义对象数组排序 五、注意事项六、总结 在Java编程中,Arrays.sort() 方法是一个非常常用的…...

JavaScript的垃圾回收机制
No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、垃圾…...

小程序使用Canvas设置文字竖向排列
在需要使用的js页面引入js文件,传入对应参数即可 /** * 文本竖向排列 */ function drawTextVertical(context, text, x, y) {var arrText text.split();var arrWidth arrText.map(function (letter) {return 26; // 字体间距,需要自定义可以自己加参数,根据传入参数进行…...

GPT-4o:重塑人机交互的未来
一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能(AI)领域,自然语言处理(NLP)技术一直被视为连接人类与机器的桥梁。近年来,随着深度学习技术的快速发展,NLP领域迎来了前所未有的变革…...

大语言模型拆解——Tokenizer
1. 认识Tokenizer 1.1 为什么要有tokenizer? 计算机是无法理解人类语言的,它只会进行0和1的二进制计算。但是呢,大语言模型就是通过二进制计算,让你感觉计算机理解了人类语言。 举个例子:单1,双2&#x…...

Linux自动挂载服务autofs讲解
1.产生原因 2.配置文件讲解 总结:配置客户端,先构思好要挂载的目录如:/abc/cb 然后在autofs.master中编辑: /abc(要挂载的主目录) /etc/qwe(在这个文件里去找要挂载的副目录,这个名…...

堆结构知识点复习——玩转堆结构
前言:堆算是一种相对简单的数据结构, 本篇文章将详细的讲解堆中的知识点, 包括那些我们第一次学习堆的时候容易忽略的内容, 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…...
JS数据类型运算符标准库
目录 数据类型运算符标准库对象Object对象属性描述对象Array对象包装对象Boolean对象Number对象String对象Math对象Date对象...
单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.13数组
C语言中,有一类数据结构,它可以存储一组相同类型的元素,并且可以通过索引访问这些元素,没错,这类数据结构就是数组。数组可以说是C语言中非常重要的数据结构之一了。使用数组可以是程序逻辑更加清晰,也更加…...

【码银送书第二十期】《游戏运营与出海实战:策略、方法与技巧》
市面上的游戏品种繁杂,琳琅满目,它们是如何在历史的长河中逐步演变成今天的模式的呢?接下来,我们先回顾游戏的发展史,然后按照时间轴来叙述游戏运营的兴起。 作者:艾小米 本文经机械工业出版社授权转载&a…...

String 类
目录: 一. 认识 String 类 二. String 类的基本用法 三. String对象的比较 四.字符串的不可变性 五. 认识 StringBuffer 和 StringBuilder 一. 认识 String 类: 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者…...

Chromebook Plus中添加了Gemini?
Chromebook Plus中添加了Gemini? 前言 就在5月29日,谷歌宣布了一项重大更新,将其Gemini人工智能技术集成到Chromebook Plus笔记本电脑中。这项技术此前已应用于谷歌的其他设备。华硕和惠普已经在市场上销售的Chromebook Plus机型,…...

Git Large File Storage (LFS) 的安装与使用
Git Large File Storage [LFS] 的安装与使用 1. An open source Git extension for versioning large files2. Installing on Linux using packagecloud3. Getting Started4. Error: Failed to call git rev-parse --git-dir: exit status 128References 1. An open source Git…...
使用国产工作流引擎,有那些好处?
使用国产工作流引擎的好处主要体现在以下几个方面: 符合企业独特业务: 国产工作流引擎可以深入挖掘和理解企业内部各项业务流程,精细化地定义流程模型和规则,实现“以流程驱动业务”的目标。这有助于企业更好地满足其独特的业务…...

掌握 Go 语言:使用 net/http/httptrace 包优化HTTP请求
掌握 Go 语言:使用 net/http/httptrace 包优化HTTP请求 介绍net/http/httptrace 包的基础概述适用场景 使用httptrace进行网络请求追踪配置httptrace的基本步骤示例:创建一个简单的HTTP客户端,使用httptrace监控连接 示例:追踪HTT…...

探秘Flask中的表单数据处理
新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、Flask中的表单处理机制 三、Flask表单处理实战 四、处理表单数据的注意事项…...

CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【决胜公务员考试】求职OMG——见面课测验1
2025最新版!!!6.8截至答题,大家注意呀! 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:( B ) A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...