missing-semester————2

news2024/9/22 10:03:21

文章目录

  • shell 脚本
    • 赋值语法
    • 函数
    • 逻辑运算符
    • 命令替换
    • 进程替换
    • 通配
  • shell工具
    • 查看命令如何使用
    • 查找文件
    • 查找代码
    • 查找shell指令

shell 脚本

很多情况下需要执行一系列的操作并使用条件或循环这样的控制流。

大多数shell都有自己的一套脚本语言,包括变量、控制流和自己的语法。

shell脚本与其他脚本语言不同之处在于,shell 脚本针对 shell 所从事的相关工作进行来优化。因此,创建命令流程(pipelines)、将结果保存到文件、从标准输入中读取输入,这些都是 shell 脚本中的原生操作,这让它比通用的脚本语言更易用。

bash脚本

赋值语法

foo=bar
root1@test:~$ foo=bar
root1@test:~$ echo $foo
bar
root1@test:~$ echo "$foo"
bar
root1@test:~$ echo '$foo'
$foo

函数

root1@test:~$ vim mcd.sh

在这里插入图片描述

$1是脚本的第一个参数,bash使用了很多特殊的变量来表示参数、错误代码和相关变量


$0 脚本名
$1$9 脚本的参数。 $1 是第一个参数,依此类推。
$@所有参数
$# 参数个数
$? 前一个命令的返回值
$$当前脚本的进程识别码
!! 完整的上一条命令,包括参数。常见应用:当你因为权限不足执行命令失败时,可以使用 sudo !!再尝试一次。
$_ 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下 Esc 之后键入.来获取这个值。

root1@test:~$ echo "hello"
hello
root1@test:~$ echo $_
hello
root1@test:~$ echo "hello"
hello
root1@test:~$ !!
echo "hello"
hello
root1@test:~$ echo "hello"
hello
root1@test:~$ echo $?
0
#0表示正确执行

命令通常使用 STDOUT来返回输出值,使用STDERR 来返回错误及错误码,便于脚本以更加友好的方式报告错误。

root1@test:~$ source mcd.sh 
root1@test:~$ mcd test
root1@test:~/test$ 

source跟./xxx.sh或sh xxx.sh有什么不同呢?
最大的不同就是前者在文件中设置的变量对当前shell是可见的,而后者设置的变量对当前shell是不可见的。要知道./xxx.sh和sh xxx.sh都是在当前shell的子shell中执行的,子shell中的变量不会影响父shell,而source是把文件中的命令都读出来一个个执行,所有的变量其实就是在父shell中设置的。
[引自http://suntus.github.io/2015/11/27/source%E5%91%BD%E4%BB%A4/

root1@test:~$ sh mcd.sh 
root1@test:~$ mcd test
root1@test:~/test$ 

逻辑运算符

root1@test:~$ false || echo "Oops, fail"
Oops, fail
root1@test:~$ true || echo "Oops, fail"
root1@test:~$ true && echo "Oops, fail"
Oops, fail
root1@test:~$ false && echo "Oops, fail"
root1@test:~$ false ; echo "Oops, fail"
Oops, fail

命令替换

通过$( CMD )这样的方式来执行CMD 这个命令时,它的输出结果会替换掉 $( CMD )

root1@test:~$ echo "start at $(date)"
start at Sat Jul  8 11:43:48 UTC 2023

进程替换

<( CMD ) 会执行 CMD 并将结果输出到一个临时文件中,并将 <( CMD ) 替换成临时文件名。这在希望返回值通过文件而不是STDIN传递时很有用。例如, diff <(ls foo) <(ls bar) 会显示文件夹 foo 和 bar 中文件的区别。

root1@test:~$ cat <(ls) <(ls ..)
a.txt
hello.txt
hello2.txt
last-modeified.txt
mcd.sh
semester
test
root1
root1@test:~$ ls ..
root1
root1@test:~$ ls
a.txt      hello2.txt          mcd.sh    test
hello.txt  last-modeified.txt  semester

通配

当执行脚本时,经常需要提供形式类似的参数。bash可以轻松的实现这一操作,它可以基于文件扩展名展开表达式。

通配符
可以使用?*来匹配一个或任意个字符

例如,对于文件foo, foo1, foo2, foo10 和 bar, rm foo?这条命令会删除foo1 和 foo2 ,而rm foo* 则会删除除了bar之外的所有文件。

root1@test:~$ ls
bar.md  bar.txt  foo.md  foo.txt  mcd.sh  semester
root1@test:~$ ls *.md
bar.md  foo.md
root1@test:~$ ls foo.?
ls: cannot access 'foo.?': No such file or directory
root1@test:~$ ls foo.??
foo.md

花括号{}
当有一系列的指令,其中包含一段公共子串时,可以 用花括号来自动展开这些命令。

root1@test:~$ ls
mcd.sh  semester
root1@test:~$ touch {foo,bar}.{txt,md}
root1@test:~$ ls
bar.md  bar.txt  foo.md  foo.txt  mcd.sh  semester

shell工具

查看命令如何使用

tldr

https://tldr.sh/
https://tldr.inbrowser.app/pages.zh/common/
在这里插入图片描述在这里插入图片描述

查找文件

一般:
find
在这里插入图片描述在这里插入图片描述

root1@test:~$ find . -name '*.md' -exec rm {} \;
root1@test:~$ ls
bar.txt  foo.txt  mcd.sh  semester

更高效的方法:
locate
https://man7.org/linux/man-pages/man1/locate.1.html

查找代码

一个最常见的场景是希望查找具有某种模式的全部文件,并找它们的位置。

为了实现这一点,很多类UNIX的系统都提供了grep命令,它是用于对输入文本进行匹配的通用工具。

-C :获取查找结果的上下文(Context);

grep -C 5 会输出匹配结果前后五行

-v 将对结果进行反选(Invert),也就是输出不匹配的结果。
当需要搜索大量文件的时候,使用 -R 会递归地进入子目录并搜索所有的文本文件。

有很多办法可以对 grep -R 进行改进,例如使其忽略.git 文件夹,使用多CPU等等。因此也出现了很多它的替代品,包括 ack, ag 和 rg。

ripgrep (rg) ,速度快,而且用法非常符合直觉。

查找shell指令

history 命令允许以程序员的方式来访问shell中输入的历史命令。

如果要搜索历史记录,则可以利用管道将输出结果传递给 grep 进行模式搜索。 history | grep find 会打印包含find子串的命令。

对于大多数的shell来说,可以使用 Ctrl+R 对命令历史记录进行回溯搜索。敲 Ctrl+R 后可以输入子串来进行匹配,查找历史命令行。

Ctrl+R 可以配合 fzf 使用。fzf 是一个通用对模糊查找工具,它可以和很多命令一起使用。

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

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

相关文章

006-Logstash、FileBeat、ELK整合详解

目录 ELK架构背景需求架构logstash核心概念配置文件结构插件Codec Plugin-Multiline输出&#xff1a;elasticsearch输入&#xff1a;jdbcGrok插件Grok语法 mutate插件Date插件 Logstash Queue Beats配置步骤 ELK整合步骤1&#xff1a;日志采集步骤2&#xff1a;配置Logstash接收…

ChatGLM2体验+ubuntu18.04LTS+CPU版本

ChatGPT在自然语言处理领域的表现让人振奋&#xff0c;开启了大模型在通用人工智能领域的大门。 许多工作随之跟进&#xff0c;并开源&#xff0c;凭借相对小的参数量达到近似GPT的效果&#xff0c;包括LLama&#xff0c;alpace等。 其中LLama训练语料主要选择英语&#xff0…

Docker内部工作原理:容器化背后的魔法

Docker内部工作原理是怎样的&#xff1f; 现在我们知道了Docker是什么以及它提供了哪些好处&#xff0c;让我们逐个重要的细节来了解。 什么是容器&#xff1f;它们是如何工作的&#xff1f; 在深入研究Docker的内部机制之前&#xff0c;我们首先要了解容器的概念。简单地说&am…

在工作与生活中保持情绪稳定的艺术

强烈的情绪波动&#xff1a;工作中的挑战 在我的职业生涯中&#xff0c;我经历过许多情绪波动的时刻。其中一个最具挑战性的时刻是在我负责一个重要项目的时候。我需要在短时间内完成大量的工作&#xff0c;同时还要管理一个由不同背景和技能的人组成的团队。这个项目的压力让…

leetcode-704. 二分查找

leetcode-704. 二分查找 文章目录 leetcode-704. 二分查找一.题目描述二.第1次代码提交(非二分查找)三.第2次代码提交(非二分查找&#xff0c;std::find和std::distance)四.第3次代码提交(二分查找)五.关于C中int型的奇数除以2 一.题目描述 二.第1次代码提交(非二分查找) clas…

Openlayers实战:drawstart,drawend 绘制交互应用示例

Openlayers地图中,绘制一个多边形是非常见的一个应用,涉及到交互会在绘制开始 drawstart 和绘制结束drawend时,通常会在绘制完成后取消继续绘制,然后提出feature的一些信息。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代…

B066-基础环境-前后端整合 批量删除 下拉 级联 增改

目录 批量删除页面调整普通属性的新增和修改引用属性的新增和修改管理员下拉列表部门树 见文档与代码 cd 子项目 运行前端项目 页面布局分析 批量删除 点击多选 - 改变data - 点击批量删除 - 带参数发请求 页面调整 略 普通属性的新增和修改 新增按钮&#xff1a;点击…

【MySQL系列】在Centos7环境安装MySQL

「前言」文章内容大致是在Centos7环境安装MySQL&#xff0c;演示安装的版本为5.7 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 浮生梦&#xff0c;三生渺渺&#xff0c; 因缘无踪&#xff0c;虽堪恋&#xff0c;何必…

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测

回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-BiGRU-Attention多输入单输出回归预测&#xff0c;CNN-GRU结合…

Vision Transformer(VIT)论文解读及实现

1 论文解读 paper&#xff1a;VIT 1.1 VIT模型架构如下图所示&#xff1a; 图片原始输入维度 H * W * C在H和W按像素P切分&#xff0c;则H 、W可分割为 NPP, NHW/(PP)&#xff0c;N为输入transform序列的长度。 x ∈ R H ∗ W ∗ C > x ∈ R N ∗ P 2 ∗ C x \in R^{H*W…

第三章 SSD存储介质:闪存 3.1

3.1 闪存物理结构 闪存芯片从小到大依此是由&#xff1a;cell&#xff08;单元&#xff09;、page&#xff08;页&#xff09;、block&#xff08;块&#xff09;、plane&#xff08;平面&#xff09;、die&#xff08;核心&#xff09;、NAND flash&#xff08;闪存芯片&#…

Python find()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 find 1、指定检索位置2、参数为负数3、超出范围3、find()和index()的区别&#x…

【Docker】Docker安装MySQL

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前专攻C/C、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL、蓝桥杯&am…

Win11系统如何安装Oracle数据库(超级详细)

前言&#xff1a;在我们安装Oracle之前我们得理解Oracle数据库的优点是什么&#xff1a; Oracle是一个功能强大、可扩展和全面的数据库平台&#xff0c;具有广泛的功能和企业级能力&#xff0c;适用于处理复杂的企业级应用和大型数据集。 目录 一.下载Oracle数据库软件&…

解决idea只能通过 idea.bat打开的问题

解决&#xff1a;C盘用户下面 有idea的配置文件 &#xff0c;找到idea64.exe.vmoptions 把 -jetbrain &#xff1a; 配置的 jar路径删除

Tablet vs. eReader: Which Is Better for Ebooks? 平板电脑与电子阅读器:哪个更适合电子书?

eReaders are best if all you want to do is have something as close to a paper book as possible. However, if you need anything more than that, a tablet makes more sense as a general-purpose device that can also read ebooks. 如果您只想拥有尽可能接近纸质书的东…

认识文件操作与IO

文章目录 认识文件文件夹文件路径文件分类 文件操作File类构造方法常用方法 字节流IOInputStream常用方法 FileInputStream构造方法FileInputStream实例 OutputStream方法 FileOutputStream 字符流IO 认识文件 我们平时所说的文件指的是存在硬盘上的文件&#xff0c;我们平时的…

Openlayers实战:回显多点、多线段、多多边形

Openlayers地图中,回显数据是非常重要的。 继上一示例回显点、线、圆形、多边形后。本示例回显多线,多点,多个多边形。用到了MultiPoint,MultiLineString,MultiPolygon。 多个信息的显示可以采用循环的方式,单个显示点、线、面。 但是循环方式是要多次计算的,而MultiPoint…

GUI (java)

GUI 一.GUI概念二.Swing概述三.容器组件四.常用容器1.窗体(1) JFrame类的构造方法(2) JFrame类的常用方法 2.面板(1)JPanel类的构造方法(2)JPanel类的常用方法 五.布局管理器1. FlowLayout 流式布局(1)FlowLayout构造方法 2.BorderLayout 边界布局3.GridLayout 网格布局 六.常用…

LangChain: 大语言模型的新篇章

本文介绍了LangChain框架&#xff0c;它能够将大型语言模型与其他计算或知识来源相结合&#xff0c;从而实现功能更加强大的应用。接着&#xff0c;对LangChain的关键概念进行了详细说明&#xff0c;并基于该框架进行了一些案例尝试&#xff0c;旨在帮助读者更轻松地理解LangCh…