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


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】详解堆的基本结构及其实现

文章目录 前言1.堆的相关概念1.1堆的概念1.2堆的分类1.2.1小根堆1.2.2大根堆 1.3堆的特点堆的实用场景 2.堆的实现2.1初始化2.2插入2.3堆的向上调整2.4删除2.5堆的向下调整2.6判空2.7获取堆顶元素2.8销毁 3.堆排序3.1实现3.2堆排序的时间复杂度问题 前言 在上一篇文章中&#…

【ArcGIS微课1000例】0113:大地测量要素概述与构建

文章目录 一、大地测量要素描述1. 大地要素的概念2. 大地要素的类型二、创建大地测量要素1. 创建要素类2. 创建大地要素一、大地测量要素描述 1. 大地要素的概念 大地测量要素的测量值考虑了投影空间的固有变形。如果要创建一个空间跨度较大的要素(例如一条横跨大洋的飞行路…

TMS320F280049 ECAP模块--总览(0)

ECAP 特性&#xff1a; 4个32bit的事件时间戳寄存器&#xff1b; 4个连续时间戳捕获事件的边沿极性可选上升沿、下降沿 4个事件中每个都能触发中断 4个事件都能做单词触发 可以连续捕获4个事件 绝对的捕获时间戳 差异模式捕获 不使用捕获模式时&#xff0c;可以配置输出…

SIP通话分析

20240603 - 引言 分析SIP协议的时候&#xff0c;发现了几个问题。虽然说&#xff0c;从整体上来看这个SIP的通话流程也没麻烦&#xff0c;实际上从RFC的概述部分就已经基本上就已经了解了全貌。但在实际的场景中&#xff0c;很多字段起到的作用就不太一样了。 虽然一开始的时…

Python 图书馆管理系统 有GUI界面 【含Python源码 MX_031期】

使用python3&#xff0c;PyQt5&#xff0c;Sqlite3数据库搭建 主要功能&#xff1a; 用户注册、登录、修改密码、用户管理存储图书信息、采购增加和淘汰删除功能、租借功能实现图书采购、淘汰、租借功能。实现查询图书信息、采购和淘汰、库存、和租借情况实现统计图书的采购、…

发布 jar 包到 maven 中央仓库

目前开发基本都是以maven或者gradle的方式,直接引入依赖包即可,那么该咋那么发布我们自己的jar包到maven仓库,让别人使用呢?本文适用于2024.3之后的步骤 文章目录 账号准备第一步,注册账号第二步,新建命名空间第三步,验证命名空间第四步,创建 push 的账号和密码点击右…

使用docker安装mysql详细教程

一、Docker安装Mysql 1、启动Docker 启动&#xff1a;sudo systemctl start dockerservice docker start 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 2、查询mysql docker search mysql 3、安装mysql 1.默认拉取最新版本mysql dock…

JavaScript 基础 - 对象

对象 对象是一种无序的数据集合&#xff0c;可以详细的描述描述某个事物。 注意数组是有序的数据集合。它由属性和方法两部分构成。 语法 声明一个对象类型的变量与之前声明一个数值或字符串类型的变量没有本质上的区别。 <script>let 对象名 {属性名&#xff1a;属性值…

accelerate笔记:实验跟踪

Accelerate支持七种集成的跟踪器&#xff1a; TensorBoardWandBCometMLAimMLFlowClearMLDVCLive要使用这些跟踪器&#xff0c;可以通过在 Accelerator 类的 log_with 参数中传入所选类型来实现 from accelerate import Accelerator from accelerate.utils import LoggerTypeac…

高通开发系列 - ubuntu中的docker安装debian镜像

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 概述当前状态Ubuntu中安装dockerDebian镜像Debian容器中操作更改Debian源安装应用程序

手机号脱敏

手机号脱敏 // 手机号脱敏subTelephone(telphone) {let result telphone.substr(0, 4) **** telphone.substr(8);return result;},

lua vm 四: 表达式

lua 的表达式有一些特殊情况。 1. 被括号包起来的表达式永远被当成一个值[1] (f(x,y,z))&#xff0c;即使 f 返回多个值&#xff0c;这个表达式永远是单个值。 2. 多返回值的调整[1] 函数调用和变长参数表达式都会产生多个值&#xff0c;这些表达式被称为多返回值表达式&…

每日复盘-20240603

20240603 六日涨幅最大: ------1--------300637--------- 扬帆新材 五日涨幅最大: ------1--------300637--------- 扬帆新材 四日涨幅最大: ------1--------301306--------- 西测测试 三日涨幅最大: ------1--------301306--------- 西测测试 二日涨幅最大: ------1--------30…

28 _ WebComponent:像搭积木一样构建Web应用

在上一篇文章中我们从技术演变的角度介绍了PWA&#xff0c;这是一套集合了多种技术的理念&#xff0c;让浏览器渐进式适应设备端。今天我们要站在开发者和项目角度来聊聊WebComponent&#xff0c;同样它也是一套技术的组合&#xff0c;能提供给开发者组件化开发的能力。 那什么…

【TB作品】MSP430F5529单片机,温控小风扇,DS18B20温度读取,PWM风扇

功能 /* OLED SCL ----------P3.0 SDA ----------P3.1 VCC ----------3.3V GND ----------GND 风扇 DATA ----------P2.4 VCC ----------3.3V GND ----------GND DS18B20 DATA ----------P1.5 VCC ----------3.3V GND ----------GND 功能&#xff1a; S1 改变占…

python 各种画图(2D 3D)-1 _matplotlib 官方网站笔记

背景 需利用python进行3D可视化处理&#xff0c;用于分析python得到的数据的正确性。 知识学习 python高阶3D绘图---pyvista模块&#xff0c;mayavi模块&#xff0c;pyopengl模块&#xff0c;MoviePy模块基础使用-CSDN博客 python用于3D绘图的模块比较多&#xff0c;pyvist…

目标2亿欧元!四年两次募资,全球最早专注于量子投资的Quantonation再次加码

Quantonation Ventures 是全球第一家专注于深度物理和量子技术的早期风险投资公司。4月10日&#xff0c;该公司宣布其第二只专门用于量子技术的早期基金 Quantonation II 首次募资完成&#xff0c;目前已募资 7000 万欧元&#xff0c;而目标为 2 亿欧元。 首次募资就募到了将…

试比较GD32E230系列与L233/235芯片在IIC上使用温度传感器SHT40的异同

不说废话&#xff0c;上代码&#xff0c;不同之处直接用宏 展开 1. 首先是i2c 时钟配置 函数有些出入 void sensirion_i2c_attribute_config(){#ifdef GD32E230/* I2C clock configure */i2c_clock_config(I2C1, 100000, I2C_DTCY_2);/* I2C address configure */i2c_mode_a…

《QT从基础到进阶·四十一》无法解析的外部符号及生成事件加入QT打包命令报错问题

其他无法解析的外部符号&#xff1a; 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl ML_AddinManger::metaObject(void)const "… 无法解析的外部符号 “public: virtual void * __cdecl ML_AddinManger::qt_metacast(char const *)” (?…

toefl listening_托福听力

x.1 课程介绍 x.1.1 课程介绍 考试介绍 注意事项如下&#xff0c; x.1.2 分数设定和方法论 x.2.1 细节题解法 x.2.2 对话主旨题解法 听力对话不要扣分&#xff1b; 内容主旨题&#xff0c;以what开头&#xff1b; 目的主旨题&#xff0c;以why开头&#xff1b; 目的主旨题…