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 来设置根元素的字体大小。根元素的字体大小会影响整个页面的文本内容,默认情况下,根元素的字体大小是浏览器默认的大小。 要设置根元素的字体大小,你可以使用 …...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...