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

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)使用 findxargs 查找并删除文件。

使用 -0 选项,以 null 字符作为输入分隔符

使用 -print0 选项以 null 字符(\0)分隔每个文件名。 

find . -name "*.log" -print0 | xargs -0 rm
(2)使用 findxargs 查找并压缩文件。
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 替换所有 VimNeoVim

(4)多窗口编辑

  • 打开并分割窗口:
    • 在 Vim 中输入 :split practice6-2.txt 打开第二个文件并进行水平分割。
    • 使用 <C-w>h<C-w>j 在窗口间切换。

(5)自定义 Vim

创建 .vimrc 文件并进行基本配置:
vim ~/.vimrcset number            " 显示行号
syntax on             " 语法高亮
set tabstop=4         " 设置 tab 宽度为 4
set expandtab         " 用空格替代 tab


 

相关文章:

The Missing Semester ( Shell 工具和脚本 和 Vim)

管道符号 &#xff08;1&#xff09;管道符号 | 将前一个命令的输出作为下一个命令的输入 例如&#xff1a; 以下为 ./semester输出中提取包含 "Last-Modified" 的行并写入文件 last-modified.txt./semester | grep "Last-Modified" > ~/last-modif…...

【Uniapp微信小程序】自定义水印相机、微信小程序地点打卡相机

效果图 template 下方的image图片自行寻找替换&#xff01; <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安装文档

前置环境&#xff1a; 操作系统&#xff1a; CentOS Linux release 7.7 java JDK &#xff1a; 1.8.0_231 1、准备工作 准备以下安装包&#xff1a; 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()` 方法

文章目录 一、方法定义参数说明返回值 二、使用场景三、实现原理四、示例代码示例一&#xff1a;对整型数组排序示例二&#xff1a;对字符串数组排序示例三&#xff1a;对自定义对象数组排序 五、注意事项六、总结 在Java编程中&#xff0c;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:重塑人机交互的未来

一个愿意伫立在巨人肩膀上的农民...... 一、推出 在人工智能&#xff08;AI&#xff09;领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;技术一直被视为连接人类与机器的桥梁。近年来&#xff0c;随着深度学习技术的快速发展&#xff0c;NLP领域迎来了前所未有的变革…...

大语言模型拆解——Tokenizer

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

Linux自动挂载服务autofs讲解

1.产生原因 2.配置文件讲解 总结&#xff1a;配置客户端&#xff0c;先构思好要挂载的目录如&#xff1a;/abc/cb 然后在autofs.master中编辑&#xff1a; /abc&#xff08;要挂载的主目录&#xff09; /etc/qwe&#xff08;在这个文件里去找要挂载的副目录&#xff0c;这个名…...

堆结构知识点复习——玩转堆结构

前言:堆算是一种相对简单的数据结构&#xff0c; 本篇文章将详细的讲解堆中的知识点&#xff0c; 包括那些我们第一次学习堆的时候容易忽略的内容&#xff0c; 本篇文章会作为重点详细提到。 本篇内容适合已经学完C语言数组和函数部分的友友们观看。 目录 什么是堆 建堆算法…...

JS数据类型运算符标准库

目录 数据类型运算符标准库对象Object对象属性描述对象Array对象包装对象Boolean对象Number对象String对象Math对象Date对象...

单片机之从C语言基础到专家编程 - 4 C语言基础 - 4.13数组

C语言中&#xff0c;有一类数据结构&#xff0c;它可以存储一组相同类型的元素&#xff0c;并且可以通过索引访问这些元素&#xff0c;没错&#xff0c;这类数据结构就是数组。数组可以说是C语言中非常重要的数据结构之一了。使用数组可以是程序逻辑更加清晰&#xff0c;也更加…...

【码银送书第二十期】《游戏运营与出海实战:策略、方法与技巧》

市面上的游戏品种繁杂&#xff0c;琳琅满目&#xff0c;它们是如何在历史的长河中逐步演变成今天的模式的呢&#xff1f;接下来&#xff0c;我们先回顾游戏的发展史&#xff0c;然后按照时间轴来叙述游戏运营的兴起。 作者&#xff1a;艾小米 本文经机械工业出版社授权转载&a…...

String 类

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

Chromebook Plus中添加了Gemini?

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

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…...

使用国产工作流引擎,有那些好处?

使用国产工作流引擎的好处主要体现在以下几个方面&#xff1a; 符合企业独特业务&#xff1a; 国产工作流引擎可以深入挖掘和理解企业内部各项业务流程&#xff0c;精细化地定义流程模型和规则&#xff0c;实现“以流程驱动业务”的目标。这有助于企业更好地满足其独特的业务…...

掌握 Go 语言:使用 net/http/httptrace 包优化HTTP请求

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

探秘Flask中的表单数据处理

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

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...