shell编程基础笔记
目录
echo改字体颜色和字体背景颜色
bash基本功能:
运行方式:推荐使用第二种方法
变量类型
字符串处理:
条件判断:(使用echo $?来判断条件结果,0为true,1为false)
条件语句:
循环语句
特殊流程控制语句
read读取控制台输入
函数
数组:
切片
部分图片截取自【尚硅谷Linux系统管理教程(linux系统管理精讲)】https://www.bilibili.com/video/BV1ut411a7ro?vd_source=4aa5c9ca48e929b37821b89859f00208B仅供学习使用,感谢!
echo改字体颜色和字体背景颜色
bash基本功能:
①。查看历史输入命令history,最大存储在磁盘1000条,可进入/etc/profile进行修改HISTSIZE=1000,进行扩充;
补充:可以使用上下箭头进行历史命令的切换,也可以使用“!历史命令行号”
②。命令改别名alias,进入/root/.bashrc可进行修改,使用source /root/.bashrc进行更新,可使用“unalias 别名”进行删除
加入--color=auto显示颜色
③。错误输出重定向追加保存:“错误命令 2>> 文件”(只能保存错误命令)
正确输出和错误输出同时重定向追加保存:“命令 >> 文件 2>&1”/ "命令 &>> 文件"
分别保存正确错误文件:“命令>>文件1 2>>文件2”
④。多命令顺序执行:
1)。“;” 顺序执行多命令并结果互不影响
2)。“&&” 前者正确,执行后者
3)。“ || ” 前者错误,执行后者
⑤。bash中其他特殊符号(重点注意)
‘’单引号,所见即所得,不能在单引号内再使用单引号。
“”双引号,拥有“调用变量的值”,“引用命令”,“转义字符”的特殊含义,双引号可以嵌套单引号,但不能直接嵌套双引号或反引号。
`` 反引号,其括起来的内容是系统命令,可以调用系统命令将结果赋值给一个变量例如:a=`ls /root`
$() 和反引号作用一样,用来引用系统命令。(推荐使用)
() 用于一串命令执行时,()中的命令会在子shell中运行(相当于执行局部变量)
{} 用于一串命令执行时,{}中的命令会在当前shell中执行,也可以用于变量变形与替换 (相当于执行全局变量)
⑥。bash快捷键
查看系统所有快捷键:stty -a
修改系统快捷键:stty 关键字 快捷键
运行方式:推荐使用第二种方法
①.bash/sh + 绝对/相对路径
②.赋予执行权限chmod +x 文件,以后可以直接用路径调用不需要加bash/sh(相对路径要加./)
③.脚本路径前加".空格"或者source
变量类型
①.预定义变量
$? 功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值非0(具体实施那个数,有命令自己来决定),则证明上一个命令执行不正确
$$ 查看当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID
②。环境变量
常用系统变量$HOME ,$PWD,$SHELL,$USER
查看系统变量值:echo $HOME
1)。PATH:系统查找命令的路径
PATH变量的值是用“:”分割的路径,这些路径就是系统查找命令的路径。也就是说当我们输入一个程序名,如果没有写入路径,系统就会到PATH变量定义的路径中去寻找,是否有可以执行的程序。如果找到则执行,否则会报“命令没有发现”的错误
自已定义的脚本也可以通过将脚本复制到PATH变量定义的路径中,或者使用PATH=“$PATH”:/root/sh修改PATH变量的值进行叠加,就可以不输入路径而直接运行
2)。PS1变量:命令提示符设置
PS1,是用来定义命令行的提示符,可以按照我们自己的需求来定义自己喜欢的提示符,PS1支持以下这些选项
3)LANG语系变量
LANG变量定义了Linux系统的主语系环境,这个变量的默认值
可以使用locale -a | more来查看支持的语系
4)环境变量配置文件调用过程
③。位置参数变量
特殊变量
$n 功能描述:n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$# 功能描述:获取所有输入参数个数,常用于循环
$* 功能描述:这个变量代表命令行中的所有参数,$*把所有的参数看成了一个整体
$@ 功能描述:这个变量也代表命令行中的所有参数,不过$@把每一个参数区分对待
举例
④.自定义变量
基本语法:
定义变量:变量名=变量值,注意=前后不能有空格(定义变量不需要加$,调用变量需要给变量前加$)
撤销变量:unset 变量名
声明静态变量:readonly 变量,注意:不能unset
使用“export 变量(declare -x 变量)”可以把变量升级为全局(环境)变量,供其他变量使用(例如将父shell继承给子shell)
变量连接:变量=“$变量”连接值
变量定义规则:
变量名称由字母,数字,下划线组成,不能以数字开头,环境变量建议大写
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号和单引号括起来
字符串处理:
①。cut列提取命令
cut [选项] 文件名
选项:
-d 分隔符:按照指定分隔符进行分列
-f 列号:提取第几列,一般与-d联用,cut命令的默认分隔符为制表符tab键,不对空格支持
-c 字符范围: 不依赖分隔符来区分列,而是通过字符范围(行首为1)来进行字段提取。“n-”表示从第n个字符到行尾;“n-m”从第n个字符到第m个字符;“-m”表示从第一个字符到第m个字符。
②。 Awk
列数表示直接为"$数字"
可以使用“-F 分隔符”来进行分割,注意引号的使用
1)。printf 输出
2)。 awk基本使用 awk ‘条件1 {动作1} 条件2 {动作2}….’ 文件名 (动作写在{}中,转义字符和字符串需要用“”括起来,
awk解决cut不能处理的空格问题)
3)awk内置变量
注意:当使用FS时,可能第一行没有起作用,可能是需要加BEGIN条件
③。sed命令
列数表示直接为数字
sed命令主要是用来将数据进行选取,替换,删除,新增的命令
格式:sed [选项] '[动作]' 文件名
注意:1)如果想追加或插入多行数据,除最后一行外,每行的末尾都要加入“\”代表数据未完结;
2)-d只有行删除,没有具体的字符串删除功能,可以使用s将字符串替换为空,即可达到删除字符串的效果
3)多条动作之间要用“;”号或回车进行分割(一般与-e配合使用),当使用-e对多条命令进行编辑时,要与命令紧挨使用,中间不能有其他选项
4)指定行范围可以用“,”例如1,3表示第一行到第三行
④。排序命令sort
格式:sort [选项] 文件名
补充:-k 指定字段号,一般与-t搭配使用,当-t分割后可以选择指定字段号;“-k 3”表示从第三个字段到行尾排序
⑤。uniq命令
uniq命令是用来取消重复行,其实和“sort -u”是一样的
格式:uniq [选项] 文件名
选项:-i: 忽略大小写
⑥。统计命令wc
格式:wc [选项] 文件名
选项:-l: 只统计行数
-w :只统计单词数
-m:只统计字符数
条件判断:(使用echo $?来判断条件结果,0为true,1为false)
基本语法:①.test 判断条件
②.[ 判断条件 ] (注意条件前后距离[]要有空格,等号前后也要有空格)
常用判断条件:
①.两个整数之间比较
②.按照文件权限进行判断
③.按照文件类型进行判断
④.两个文件之间进行比较
⑤。字符串比较
⑥。多重条件比较
条件语句:
注意:条件判断式不用再额外加中括号,例子多加了一层中括号
①.if判断基本语法:
单分支:
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
多分支:
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注意事项:[ 条件判断式 ],中括号和条件判断式之间必须要有空格,if后要有空格
②.case语句基本语法
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
………..省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注意事项:①case行尾必须为单词“in”,每一行模式匹配必须以右括号“)”结束
②双分号“;;”表示命令序列结束,相当于break
③最后的“*)”表示默认模式,相当于default
循环语句
并发控制(补充)
& 将程序放置后台运行
Wait 允许脚本等待一个或多个后台进程完成
一种做法:
for语句
do {
循环体
}&
Wait
①for循环基本语法:
for((初始值;循环条件控制;变量变化))
do
程序
done
② for in循环基本语法:
for 变量 in 值1 值2 值3……
do
程序
done
③$*,$@基本语法:两个均代表命令行中的所有参数,$*将所有参数看成一个整体,$@把每个参数区分对待
比较:$*,$@都表示传递给函数或脚本的所有参数,不被双引号包含时,都以$1 $2 $3…..的形式分开输出所有参数;
当它们被双引号包含时,$*会以“$1 $2 $3….”按整体的形式输出所有参数,$@以$1 $2 $3…..的形式分开输出所有参数
④,while/until循环基本语法
while只要条件判断式不成立时跳出循环
until只要条件判断式成立则跳出循环
while/until [ 条件判断式 ]
do
程序
done
特殊流程控制语句
①,exit语句
系统的exit命令,是用于退出当前用户的登陆状态;
在shell脚本中,exit语句是用来退出当前脚本的,只要碰到exit语句,后续的程序就不再执行
语法:exit [返回值]
可以使用$?来查看exit的返回值
②,break和continue
read读取控制台输入
基本语法:read (选项) (参数)
选项:-p:指定读取值时的提示符;
-t:指定读取值时等待的时间 (秒)。
-n: 指定接受的字符数
-s: 隐藏输入的数据
参数:
变量:指定读取值的变量名
注意:字符串比较时,等号前后要有空格,否则计算机会识别为赋值语句,定义变量时不要有空格
若输入错误可以ctrl+退格键删除
函数
系统函数
①basename
基本语法:basename [string/pathname] [suffix]
功能描述:basename命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来。
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或suffix去掉
②dirname
Dirname 文件绝对路径
功能描述:dirname命令会获取所有的前缀路径
自定义函数
基本语法
[function] 函数名()
{
函数体;
[return int;]
}
经验技巧:
①。必须在调用函数地方之前,先声明函数,shell脚本是逐步运行的,不会像其他语言一样先编译
②,函数返回值,只能通过$?系统变量获得,可以显示加:return返回,如果不加,将以最后一条命令结果作为返回值,return后跟数值n(0-255)
数组:
注意:查看和引用数组时需要加{}包裹数组
①,定义数组
数组名=(元素1 元素2 元素3,元素n)
数组名[下标]=变量值
元素定义示例:
②,查看数组
declare -a |grep 目标数组
③,访问数组
④,关联数组
功能:自定义索引;
语法:先声明关联数组
declare -A 关联数组名
数组名=([自定义数组名1]=值1 [自定义数组名2]=值2 ………..)
people=([p1]=li [pi2]=wang [p3]=zhang [p4]="ni ba")
切片
格式:{变量名:起始索引:步长} (注意:步长省略则是截取到末尾,$后面一定要加{})
相关文章:

shell编程基础笔记
目录 echo改字体颜色和字体背景颜色 bash基本功能: 运行方式:推荐使用第二种方法 变量类型 字符串处理: 条件判断:(使用echo $?来判断条件结果,0为true,1为false) 条件语句&a…...

VS Code配置Lua调试环境
我这里选用Emmylua进行Lua代码调试,调试环境配置如下: 一、安装Emmylua 在VS Code扩展里搜索emmylua,然后进行安装, 如下 二、配置launch.json 在Run and Debug里生成launch.json文件 点击以上菜单后,生成launch.json文件如下: 三、配置.e…...

FPGA(一)Quartus II 13.1及modelsim与modelsim-altera安装教程及可能遇到的相关问题
零.前言 在学习FPGA课程时,感觉学校机房电脑用起来不是很方便,想着在自己电脑上下载一个Quartus II 来进行 基于 vhdl 语言的FPGA开发。原以为是一件很简单的事情,没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装(也…...

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分
目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…...

Django之ORM
1.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对…...
html css 图片背景透明
html css图标背景透明 css属性: background-color:transparent; mix-blend-mode: multiply; 完整HTML代码: <html><head><title>Test</title></head><body><div id"test" style"background-col…...

使用ALB实现gRPC协议的负载均衡
gRPC是一种高性能、开源的远程过程调用框架,当您使用gRPC进行后端服务通信时,您可使用应用型负载均衡ALB(Application Load Balancer)实现gRPC协议的负载均衡,统一流量入口。gRPC基于HTTP/2协议进行通信,目…...

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失
问题 easycode插件生成的mapper.xml文件字段之间逗号丢失,如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…...
【Linux测试题】
1. 选择题 题目: 如果想将电脑中Windows C盘(hd1)安装在Linux文件系统的/winsys目录下,请问正确的命令是()。 选项: A. root104.123.123.123:~# mount dev/hd1 /winsys B. root104.123.123.12…...

python使用openpyxl处理excel
文章目录 一、写在前面1、安装openpyxl2、认识excel窗口 二、基本使用1、打开excel2、获取sheet表格3、获取sheet表格 尺寸4、获取单元格数据5、获取区域单元格数据6、sheet.iter_rows()方法7、修改单元格的值8、向表格中插入行数据9、实战:合并多个excel 三、获取E…...

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)
Mybatis 0、环境准备0.1 准备数据库表emp;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增(主键返回)1.3 更新1.4 查询(解决字段名与类属性名…...

基于MATLAB野外观测站生态气象数据处理分析实践应用
1.本课程基于MATLAB语言 2.以实践案例为主,提供所有代码 3.原理与操作结合 4.布置作业,答疑与拓展 示意图: 以野外观测站高频时序生态气象数据为例,基于MATLAB开展上机操作: 1.不同生态气象要素文件的数据读写与批处理…...
IP 地理位置定位技术原理概述
本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用,随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议࿰…...

C语言(分支结构)
问题引出 我们在程序设计往往会遇到如下的问题,比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作,算法上属于一个分支结构,C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否,…...
批量将不同的工作簿合并到同一个Excel文件
批量将不同的工作簿合并到同一个Excel文件 下面是一个示例,展示如何批量将不同的工作簿合并到同一个Excel文件,并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下: 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用
对于一些建设年份久远的老旧配电房,由于配套降温散热设施设备不完善、线路设备老化等因素,极易出现因环境过热而影响设备正常稳定运行,进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

2025美赛数学建模常用数据库网站大全
优秀模板写作红宝书数学模型获取——更多资料请点击下方名片进群获取。 一、可以查询美国各个领域经济指标的网站: olap.epsnet.com.cnhttps://www.ers.usda.gov/data-products/rice-yearbook/www.ers.usda.govU.S. Energy Information Administration (EIA) www.eia.govhttp…...

Wordpress设置固定链接形式后出现404错误
比如固定连接设置为 /archives/%post_id%.html 这种形式,看起来比较舒服。对搜索引擎也友好。 出现404需要设置伪静态...
我最近在干什么【1】
前言 打算开一个新系列,偏休闲点的,不是完整全面的技术分享,话题还是聚焦个人成长(学的技术、了解到的信息、看的书……) 方面。文章偏意识流点,单纯分享我最近在干什么,不定期更新,…...
[Vue3]computed原理
Computed原理 不管在是 Vue 2 还是在 Vue 3 中,对 computed 本身的实现原理基本都是一样的。当使用 computed 计算属性时,组件初始化会对每一个计算属性都创建对应的 watcher , 然后在第一次调用自己的 getter 方法时,收集计算属性依赖的所有…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

jdbc查询mysql数据库时,出现id顺序错误的情况
我在repository中的查询语句如下所示,即传入一个List<intager>的数据,返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致,会导致返回的id是从小到大排列的,但我不希望这样。 Query("SELECT NEW com…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...