Shell Linux学习笔记
注意:该文章摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除!
目录
什么是shell ?
Linux正则匹配
grep
tar与unzip
echo
history
重定向
shell 单双引号
位置参数
预定义变量
运算
正则表达式
字符截取命令
awk 命令
seq 命令
整数比较
多重条件判断
if 判断
case 判断
for 循环
while 循环
until 循环
什么是shell ?
定义:shell是一个命令行解释器,为用户提供一个向linux 内核发送请求以便远程程序的界面系统级程序,用户可以用shell来启动、挂起、停止及编写程序
Linux正则匹配
正则表达式又称为正规表达式、常规表达式、在代码中常简写为regex、regex或RE。正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定的字符串。
shell三剑客:grep,sed,awk
grep
grep [选项] [查找条件(正则)] [目标文件]-E:开启扩展的正则表达式
-c:计算找到'搜寻字符串'的次数
-i:忽略大小写的不同,所以大小写视为相同
-o:只显示被漠视匹配到的字符串
-v:反向选择,即输出没有匹配到的那些字符
--color=auto:可以将找到的关键词部分加上颜色的显示!
-n:顺便输出行号
-w:表示精确匹配一个字符
元字符
^ 匹配输入字符串的开始位置。除非在方括号表达式中使用,表示不包含该字符集合。要匹配"^"字符本身,需要转移"^"
$ 匹配输入字符串的结尾位置。如果设置了RegExp对象的Multiline属性,则"$"也匹配'\n'或'r'
. “.”代表除"\n\s"之外的任何单个字符
\ 反斜杠,又叫转义字符,去除其后紧跟的元字符或通配符的 特殊意义
匹配前面的子表达式零次或多次。要匹配"*"字符,要进行\转移
n和m均为非负整数,其中n<=m,最少匹配n次,最多匹配m次
grep查找特定的字符
grep -n 'the' test.txt grep -vn 'the' test.txt #匹配除了包含the的行
使用[]来查找集合字符
eg: 要查找short和shirt时
比如我们要查找“shirt”与“short”这两个字符串时,可以发现这两个字符串均包含sh与rt。 此时执行下面命令可以提示查找到“shirt”和“short”这两个字符串,其中“[]”无论有几个字符,都代表一个字符, 但是会按照[]内的每个字符都去做一次匹配,比如[io]表示要匹配i或者o。 grep -n "sh[io]rt" test.txt
查找oo前面不是w的字符串
若查找“oo”前面不是“w”的字符串,只需要通过集合字符的反向选择“[A]”来实现该目的。 例如执行“grep -n‘[^w]oo’test.txt”命令表示在 test.txt 文本中查找“oo”前面不是“w”的字符串。 grep -n '[^w]oo' test.txt
tar与unzip
tar
-f<备份文件>或--file=<备份文件> 指定备份文件。
-v或--verbose 显示指令执行过程。
-x或--extract或--get 从备份文件中还原文件。
-z或--gzip或--ungzip 通过gzip指令处理备份文件。
unzip
-l 显示压缩文件内所包含的文件。
-v 执行时显示详细的信息。
echo
echo [param] [content]
-e # 开启转义,对反斜杠控制的字符转换
echo -e '\n' # 显示换行
echo `date` # 显示命令执行的结果
history
history [param][file]
-c # 清空历史命令
-w # 写入文件
历史命令的调用:
!n # 重复执行第n条历史命令
!! # 重复执行上一条命令
!字符串 # 重复执行最后一条以该字符串开头的命令
- Bash快捷键
- crtl+A 转前 crtl+E 转后 crtl+R 搜索历史命令 crtl+Z 放到后台运行
- crtl+K 剪切光标后 crtl+U 剪切光标前 crtl+Y 粘贴前面的内容
重定向
# 输入输出重定向
# # 标准类型
> # 重定向文件,会覆盖
>> # 追加向文件,会追加
# # 错误类型
error command 2> 文件 # 覆盖,命令的错误输出
error command 2>> 文件 # 追加,命令的错误输出
# # 正常和错误同时保存
command > file 2>&1 # 覆盖,错误及正常的保存同一文件
command >> file 2>&1 # 追加,错误及正常的保存同一文件
command $> file # 覆盖,错误及正常的保存同一文件
command $>> file # 追加,错误及正常的保存同一文件
command >> file1 2>>file2 # 正确的追加到文件1,错误追加到文件2
shell 单双引号
# shell 的单双引号
[root@localhost ~]# name=abc
[root@localhost ~]# echo '$name'
$name
[root@localhost ~]# echo ''$name''
abc
变量设置规则
变量名称可以由字母、数字和下划线组成,但不能以数字开头。
变量的默认类型都是字符串型
变量用等号连接值,等号左右两侧不能有空格。
变量的值如果有空格,需要使用单引号或者双引号苦括起来。
不能使用标点符号
位置参数
# 熟悉
$n # 对应参数
$* # 所有的参数,作为一个整体
$@ # 所有的参数,单独作为
$# # 所有参数的个数
[root@localhost ~]# vim canshu02.sh
#!/bin/bashecho $0 #表示接受命令本身
echo $1 #接受第一个参数
echo $2 #接受第二个参数
echo $3 #接受第三个参数[root@localhost ~]# ./canshu02.sh 111 222 333
./canshu02.sh
111
222
333
[root@localhost ~]# vim canshu03.sh
#!/bin/bashsum=$(( $1+$2 ))
echo "sum is : $sum"#举例说明$*和$@的区别
[root@localhost ~]# vim canshu04.sh
#!/bin/bash
for i in "$*"doecho $idonefor y in "$@"doecho $ydone[root@localhost ~]# ./canshu04.sh 111 222 333 444
111 222 333 444
111
222
333
444
#$*将所有参数看成一个整体,$@传递的每个参数区分对待
预定义变量
$? # 上一次执行结果的状态,
$$ # 当前进程的PID
$! # 后台运行的最后一个进程号 PID
运算
# 数值运算
declare [param] name
- # 给变量设定类型属性
+ # 取消变量的类型属性
-i # 声明整型
-x # 将变量声明未环境变量
-p # 显示被声明的类型#给变量aa和bb赋值
[root@localhost ~]# aa=111
[root@localhost ~]# bb=222
[root@localhost ~]# declare -i cc=$aa+$bb 同 cc=$(expr $aa + $bb ) [注意“+”号左右两侧必须有空格]同 cc=$(( $aa+$bb ))
正则表达式
* # 匹配0次或多次
. # 匹配除换行符的任意一个字符
[] # 匹配中括号中指定一个任意一个字符,只匹配一个
[^] # 匹配除中括号的字符以外的任意一个字符
\{n\} # 表示前面的字符恰好出现n次,eg: [0-9]\{4\} 匹配4位数字
\{n,\} # 表示至少匹配字符不少于n次
\{n,m\} # 匹配字符出现在[n-m]次
注意:grep 匹配加\,egrep 转义无需加 \
字符截取命令
cut [param] filename
-f # 列号
-d # 分隔符,第一列从1开始
eg: command | cut -d '|' -f 1 # 匹配以|分隔的第一列字符
注意:cut 不可以用空格作为分隔符,只用作制表符分割
awk 命令
awk 'pattern' file '{print $n}' # 打印第n列数据
eg: df -h | awk '{print $1 "\t" $5}' # 打印提取第一列和第二列eg: df -h | awk '{print $5}' | cut -d "%" -f 1 # 查看占用百分比截取%
seq 命令
sed [param] `action` filename
# param
-n # 只打印经过sed命令处理的数据
-e # 容许输入多条sed命令编辑
-i # 用sed修改结果直接修改读取数据,文件改变
# action
a\ # 追加
c\ # 行替换
i\ # 插入
d # 删除指定的行
p # 打印指定的行
s # 字符串替换,格式:'行范围+s/old_str/new_str/g'eg:
sed -n '2p' test.log # 查看第二行数据
sed '1,3d' test.log # 查看除1-3行的数据
sed '3a hello' test.log # 增加第三行的hello输出数据
# replace
sed '3s/oot/eet/g' my.log # 将第三行的oot改变为eet输入
sed -i '3s/oot/eet/g' my.log # 将第三行的oot改变为eet,文件改变
整数比较
[1 -param 2] && ehco yes || echo no
# param
-eq # ==
-ne # !=
-gt # >
-lt # <
-ge # >=
-lt # <=
多重条件判断
# 字符判断
-z str # 判断是否为空
-n str # 判断是否非空
-a # &
-o # |
eg:
[ -n "$aa" -a "$aa" -gt 23 ] && echo yes || echo no # 打印 yes
if 判断
if [conition];thenpass
fieg:
#统计首个程序根分区使用率
rate=$(df -h | awk '{print $5}' | cut -d "%" -f 1 | head -n 1)if [ $rate -ge 20 ]then
echo "error 10"
fi
# if--else多条件
if [conition]thenpass
elifthenpass
else thenpass
fi
# 单条件
if [conition]thenpasselsepass
fi
case 判断
# case语句case $变量名 in"值1")如果变量的值等值1,则执行程序1;;"值2")如果变量的值等值2,则执行程序2;; ……省略其他分支*)如果变量的值都不是以上的值,则执行程序;;
esac举例:#!/bin/bash
#测试case语句echo "如果想去上班,请输入“1”"
echo "如果不想上班,请输入“2”"
echo "如果想居家办公,请输入“3”"read -t 30 -p "请输入你的选择:" choose
case "$choose" in"1")echo "想去上班!";;"2")echo "不想去上班!";;"3")echo "居家办公!";;*)echo "只能输入1或者2或者3";;
esac
for 循环
# 语法1
for i in 值1 值2 值3 # 同 for ((初始值;循环控制条件;变量变化))dopassdone
eg1: done # for循环完毕后,最后执行一次
for i in 1 2 3 4 5 6doecho $idone
eg2:
s=0
for (( i=1;i<=100;i=i+1 ))dos=$(( $s+$i ))done echo "$s"
while 循环
while [condition]do passdoneeg:
#从1加到100 i=1
s=0while [ $i -le 100 ]
#如果变量i的值小于等于100,则执行循环 dos=$(( $s+$i ))i=$(( $i+1 ))doneecho "The sum is: $s"
until 循环
# 循环,和while循环相反,until循环时,只要条件判断式不成立,则进行循环
#从1加到100i=1
s=0until [ $i -gt 100 ]
#循环直到变量i的值大于100,循环就停止了 dos=$(( $s+$i ))i=$(( $i+1 ))doneecho "The sum is : $s "
相关文章:
Shell Linux学习笔记
注意:该文章摘抄之百度,仅当做学习笔记供小白使用,若侵权请联系删除! 目录 什么是shell ? Linux正则匹配 grep tar与unzip echo history 重定向 shell 单双引号 位置参数 预定义变量 运算 正则表达式 字符截取命令 …...
kingbase常用SQL总结之锁等待信息
锁信息与等待事件 分析kingbase(pg)数据库锁等待、死锁时需要我们准确的定位等锁或者死锁相关的事务。关于获取锁等待信息或者死锁信息已有经典的SQL可以直接使用,但是需要我们先了解sql语句获取的每个字段的意义。 获取到锁等待事务不能完全…...
「优选算法刷题」:长度最小的子数组
一、题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输…...
RuoYi-Cloud本地部署--详细教程
文章目录 1、gitee项目地址2、RuoYi-Cloud架构3、本地部署3.1 下载项目3.2 idea打开项目3.3 启动nacos3.4 若依数据库准备3.5 启动redis3.6 修改nacos中的各个模块的配置文件3.7 启动ruoyi前端项目3.8 启动各个微服务模块 4、启动成功 1、gitee项目地址 https://gitee.com/y_p…...
如何优雅的发布一个 TypeScript 软件包?
向 NPM 发布软件包本身并不是一个特别困难的挑战。但是,配置你的 TypeScript 项目以取得成功可能是一个挑战。你的软件包能在大多数项目上运行吗?用户能否使用类型提示和自动完成功能?它能与 ES Modules (ESM) 和 CommonJS (CJS) 风格的导入一…...
总结的太到位:python 多线程系列详解
前言: 上vip课的时候每次讲到框架的执行,就会有好学的同学问用多线程怎么执行,然后我每次都会说在测开课程会详细讲解,这并不是套路,因为如果你不理解多线程,不清楚什么时候该用什么时候不该用,…...
惬意上手Python —— 装饰器和内置函数
1. Python装饰器 Python中的装饰器是一种特殊类型的函数,它允许用户在不修改原函数代码的情况下,增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实,可以被赋值给变量、作为参数传递给其他函数或者作为其他…...
python 调用dll
在Python中,可以使用ctypes库来调用DLL文件。ctypes库是一个标准库,用于在Python中加载共享库(例如DLL文件)并调用其中的函数。 以下是一个简单的示例,演示如何使用ctypes库调用DLL文件中的函数: import c…...
docker里Java服务执行ping命令模拟流式输出
文章目录 业务场景处理解决实现ping功能并实时返回输出实现长ping和中断请求docker容器找不到ping命令处理 业务场景 我们某市的客户,一直使用CS版本的信控平台,直接安装客户Windows server服务器上,主要对信号机设备进行在线管理、方案配时…...
代码随想录算法训练营第十三天| 239. 滑动窗口最大值 、347.前 K 个高频元素
239. 滑动窗口最大值 思路: 用遍历区间的元素时,维护一个单调队列,从大到小排列。 要找到最大值,实际单调队列保存区间内最大值及最大值右侧的第二大值(用于当前最大值处于区间左端,在区间右移时更新临时最…...
旋转花键的使用寿命与机械原理分析
旋转花键是一种传动部件,广泛应用于各种机械设备中。对于厂商来说,如何保证使用寿命是重中之重,而旋转花键的使用寿命与其机械原理密切相关,了解其机械原理有助于更好地维护和使用旋转花键,从而提高其使用寿命。 旋转花…...
互联网摸鱼日报(2024-01-22)
互联网摸鱼日报(2024-01-22) 开源中国资讯 Stability AI 推出更小、更高效的 1.6B 语言模型 X 正面向 Android 推出音频和视频通话 Extism —— WebAssembly 插件实现框架 Gitee 推荐 | 龙蜥社区最佳安全加固实践指南 security-benchmark 每日一博 | 得物云原生容器技术探…...
CentOS 7 安装配置MySQL
目录 一、安装MySQL编辑编辑 1、检查MySQL是否安装及版本信息编辑 2、卸载 2.1 rpm格式安装的mysql卸载方式 2.2 二进制包格式安装的mysql卸载 3、安装 二、配置MySQL 1、修改MySQL临时密码 2、允许远程访问 2.1 修改MySQL允许任何人连接 2.2 防火墙的问题 2…...
Gold-YOLO(NeurIPS 2023)论文与代码解析
paper:Gold-YOLO: Efficient Object Detector via Gather-and-Distribute Mechanism official implementation:https://github.com/huawei-noah/Efficient-Computing/tree/master/Detection/Gold-YOLO 存在的问题 在过去几年里,YOLO系列已经…...
多个coco数据标注文件合并
一、coco数据集是什么? COCO(Common Objects in Context)是一个用于目标检测和图像分割任务的标注格式。如果你有多个COCO格式的JSON文件,你可能需要将它们合并成一个文件,以便更方便地处理和管理数据。在这篇博客中&…...
Kubernetes(K8S)拉取本地镜像部署Pod 实现类似函数/微服务功能(可设置参数并实时调用)
以两数相加求和为例,在kubernetes集群拉取本地的镜像,实现如下效果: 1.实现两数相加求和 2.可以通过curl实时调用,参数以GET方式提供,并得到结果。(类似调用函数) 一、实现思路 需要准备如下的…...
k8s使用ingress实现应用的灰度发布升级
v1是1.14.0版本nginx ,实操时候升级到v2是1.20.0版本nginx,来测试灰度发布实现过程 一、方案:使用ingress实现应用的灰度发布 1、服务端:正常版本v1,灰度升级版本v2 2、客户端:带有请求头versionv2标识的请求访问版…...
最新热门商用GPT4.0带MJ绘画去授权版本自定义三方接口(开心版)
一台VPS 搭建宝塔 解析域名 上传程序至根目录 访问首页在线安装配置数据库 PHP版本选择:7.3 安装完成后访问网站首页即可! 配置APIKEY,登录网站后台自定义配置,不然网站无法使用! 网站后台地址/admin 默认账号:admin 密码…...
Halcon基于形状的模板匹配inspect_shape_model
Halcon基于形状的模板匹配 基于形状的匹配,就是使用目标对象的轮廓形状来描述模板。Halcon中有操作助手,可以直观 地进行形状模板匹配的参数选择以及效果测试。如果使用算子编写,步骤如下。 (1)从参考图像上选择检测的…...
html中根元素以及根元素字体的含义
在 HTML 中,根元素是指 <html> 标签,可以使用 CSS 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容,默认情况下,根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小,你可以使用 …...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
