Shell 脚本编程

1. shell 概述

🥞 shell 是一个命令行解释器,它能接受应用程序、用户 的命令,然后调用操作系统内核。
⭐ 还是一门 功能强大的编程语言,易编写、易调试、灵活性强。

在这里插入图片描述

2. shell入门

(1)脚本格式

🍔 脚本以 #!/bin/bash 开头(指定解析器)

(2)第一个脚本

① 新建文件

touch helloworld.sh

② 写入命令

vim helloworld.ss

③ 执行脚本
🍔 方式1:bash解析器帮忙执行(相对绝对路径都可)

🍑 bash + 脚本路径
🍑 sh + 脚本路径

🍔 方式2:脚本自己执行(必须具有可执行权限+x

🍑 赋予权限
chmod -x helloworld,sh

🍑 执行脚本
./helloworld.sh
/home/helloworld.sh

🍔 方式3:.source + 脚本路径

🥞 vim test.sh   
  	a=5
🍑 .  test.sh
🍑 source test.h

👨‍🏫 区别
前两种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容,当脚本内容结束,则
子 shell 关闭,回到父 shell 中。

第三种,脚本在当前 shell 中执行,无需打开子 shell

主要区别在于 环境变量的继承,在 子shell 里边设定的变量是 局部的,子 shell 结束后就失效了

3. 变量

(1)系统预定义变量

🍔 常用的系统变量
$HOME 、 $PWD 、 $SHELL 、 $USER 等

🍔 查看系统变量的值

echo $变量名

🍔 显示当前 Shell 中所有变量

set

(2)自定义变量

🍔 语法

🍑 定义变量:变量名=变量值 【注意: = 号前后不能有空格,否者就给系统当成命令执行啦】
🍑 撤销变量:unset 变量名
🍑 声明静态变量:readonly 变量 【注意:不能unset】
🍑 局部变量升级为全局变量:export 变量名 【全局变量:子 继承 父,父 不受 子 影响】

🍔 规则

🍑 变量名:字母 数字 下划线 组成 【不能以数字开头】 环境变量名建议大写
🍑 等号两侧不能有空格,变量值带空格的字符串得用 “” 或 ‘’ 标注
🍑 bash 里边,变量默认类型为 字符串,无法进行数值运算

(3)特殊变量

🍔 参数:$数字

🍑 数字表示第几个参数,大于 10 的参数 需要用 {} 包含,例: ${10}  ${1}
🍑 $0:调用的脚本名称

🍔 $#

🍑 获取所有输入参数的个数

🍔 $*、 $@

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)	
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)(集合或数组)

🍔 $?

🍑 判断最近执行的命令的返回状态 (0 表示正常,非 0 表示执行异常)

4. 运算符

🍔 语法

🍑 $((运算式)):运算式和其他语言的一致
🍑 $[运算式]:【注意:中括号运算式两端必须有空格,而且不能直接使用冲突的运算符(转义 或 使用特定符)】
例:
$[ 2*3+4 ] 或 $((2*3+4)) 

🍑 val = `expr 2 + 2`  【注意空格和反引号】

🍑 let 高级语言运算式 【注意:中间不能有空格】
例:let a++

🍔 算术运算符

在这里插入图片描述

🍔 关系运算符

在这里插入图片描述
🍔 逻辑运算符

在这里插入图片描述

5. 条件判断

🍔 语法

🍑 [ 判断式 ] :切记要判断式两端要加空格
🥞 条件非空 即为 true 
🍟 [ haha ] 返回 true; [   ] 返回 false;

🍔 常用的判断条件

在这里插入图片描述

6. 流程判断

(1)if 单分支

👨‍🏫 中括号表达式之间必须有空格
👨‍🏫 if 后面必须要有空格

🍑 方式1
if [ 条件判断式 ];then
程序
fi

🍑 方式2
if [ 条件判断式 ]
then
	程序
fi 

(2)if 多分支

🍑 结束标志:fi 是 if 的倒写 
if [ 条件判断式1 ]
then
	程序1
elif [ 条件判断式2 ]
then
	程序2
else
	程序3
fi 

(3)case 多分支

👨‍🏫 case 行尾必须为 单词 in,每一个分支case值 行尾 必须为 右括号
👨‍🏫 双分号 ;; 表示命令序列结束,相当于 break
👨‍🏫 *):表示默认模式 default

🍑 基础语法
case $变量名 in
"值1")
	程序1
	;;
"值2")
	程序2
	;;
"值3")
	程序3
	;;
……

*)
	默认程序
;;
esac				

(4)for 循环

🍑 基础语法1
for ((初始化值;循环控制条件;变量迭代))
do
	程序
done

🍑 基础语法2(类似增强for)
for 变量 in 值1 值2 值3 ...
do
	程序
done

(5)while 循环

🍑 基础语法
while [ 条件判断式 ]
do
	程序
done

7. 读取控制台输入

🍔 基础语法

🍑 read [-p -t] 变量名
🥞 -p:指定读取值时的提示符
🥞 -t:指定读取值时等待的时间(单位:秒)不写默认为无穷
🥞 变量名:指定存值的变量名

8. 函数

(1)系统函数

🍔 basename:截取文件名称

🍑 基础语法:basename [绝对路径] [后缀]
🍑 删除 绝对路径 最后一个 '/' 前的所有字符,并把 后缀 删掉

🍔 dirname:获取文件路径的绝对路径(去掉文件名就是路径)

🍑 基础语法:dirname 文件绝对路径

(2)自定义函数

🍔 基础语法

[function] 函数名 [()]
{
	命令; ……
	[return int;]
}	

🍔 规则

🍑 函数必须声明在调用函数的地方之前 (shell 是逐行执行的)
🍑 函数返回值,只能通过 $? 系统变量获得,范围(0~255),不加 return $? 就是最后一条命令的运行
	结果

9. 正则表达式

🍔 定义

正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文
本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在 Linux 中,grep,
sed,awk 等文本处理工具都支持通过正则表达式进行模式匹配。

🍔 常用的特殊字符

🍑 ^a :匹配所有以 a 开头的行

🍑 $a :匹配所有以 a 结尾的行

🍑 .  :表示匹配任意字符

🍑 a* :表示出现 任意 次 a

🍑 [ ] :字符区间
🥞 [6,8]  :匹配 6 或 8
🥞 [0-9]  :匹配 0 到 9 之间的任意数字
🥞 [0-9]* :匹配任意个 0 到 9 之间的数字
🥞 [a-z]  :匹配一个 a-z 的任意字母
🥞 [a-c,e-f] :匹配 a-c 或 e-f 之间的任意字母

🍑 \ :转义符(单引号引注)
🥞 '\$':匹配特殊字符 $

10. 文本处理工具

(1)cut

🍑 cut [-f -d -c] 文件名
🥞 -f + 列号:表示提取第几列(2- :表示2到最后一列)
🥞 -d + 分隔符:按照分隔符分割列,默认是制表符 “\t”
🥞 -c + n:按字符进行分割,表示提取每行的第 n 个字符

(2)awk

🍔 基础语法

🍑 awk [-F -v]  'BEGIN{firstAction} /pattern1/{action1}  /pattern2/{action2}...END{endAction}' filename
🥞 -F + 分隔符:指定输入文件 分隔符
🥞 -v + 定义一个变量:赋值一个用户自定义变量
🍟 pattern:表示 awk 在数据中查找的内容,就是 匹配模式
🍟 action:找到匹配内容 --> 执行命令
🌭 BEGIN:在所有数据读取之前执行
🌭 END:在所有数据执行之后执行
⭐ filename:读取数据的文件名

🍔 内置变量

🍑 FILENAME:文件名
🍑 NR:行号
🍑 NF:列号

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js中 = 等号赋值的问题,Js中对象的引用问题,深浅拷贝

js "" 赋值符号 在js中 “”对于基本数据类型是赋值符号,比较( 或 )的时候是值;对于引用数据类型-对象来说 是地址引用,比较的时候是比较的地址。 基本数据类型和引用数据类型的比较 let a 3; let b a;…

离散数学_九章:关系(1)

关系 9.1关系及其性质 1、二元关系 2、集合A上的关系 3、n元素集合 有多少个关系? 4、关系的性质 1. 自反 2. 对称 3. 反对称 4. 传递 5、关系的组合 关系的合成 关系的幂 9.1关系及其性质 1、二元关系 设A和B是集合,一个从 A 到 B 的二元关…

stm32当中GPIO输出知识点汇总(GPIO的八种模式及其原理)

一、GPIO工作模式. 1. 四种输入模式 GPIO_Mode_IN_FLOATING 浮空输入模式 GPIO_Mode_IPU 上拉输入模式 GPIO_Mode_IPD 下拉输入模式 GPIO_Mode_AIN 模拟输入模式 2. 四种输出模式 GPIO_Mode_Out_OD 开漏输出模式 GPIO_Mode_Out_PP 推挽输出模式 GPIO_Mod…

CentOS7-部署Tomcat并运行Jpress

1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8,配置服务启动脚本,部署jpress应用。1、简述静态网页和动态网页的区别 静态网页: 请求响应信息,发给客户端进行处理,由浏览器进…

目标检测基础之IOU计算

目标检测基础之IOU计算 概念理解——什么是IOUdemo后记 概念理解——什么是IOU IOU 交并比(Intersection over Union),从字面上很容易理解:计算交集在并集的比重。从网上截张图看看 I O U A ∩ B A ∪ B IOU \frac{A \cap B}…

基于BenchmarkSQL的Oracle数据库tpcc性能测试

基于BenchmarkSQL的Oracle数据库tpcc性能测试 安装BenchmarkSQL及其依赖安装软件依赖编译BenchmarkSQL BenchmarkSQL props文件配置数据库用户配置BenchmarkSQL压测装载测试数据TPC-C压测(固定事务数量)TPC-C压测(固定时长)生成测…

[ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南

文章目录 一、前言二、SQL Server 主从同步的原理介绍三、具体的搭建过程3.1 准备工作3.1.1 卸载旧版本(如果有,可选,非必须)3.1.2 安装 Docker3.1.3 验证本地 Docker 是否安装成功 3.2 创建 Docker 网络3.3 创建主从节点的 SQL S…

[Linux系统]系统安全及应用一

系统安全及应用 一、账号安全基本措施1.1系统账号清理1.1.1将非登录用户的shell设为/sbin/nologin1.1.2锁定长期不使用的账号1.1.3删除无用的账号1.1.4锁定账号文件文件chattr1.1.5查看文件校验和md5sum 1.2密码安全控制1.2.1设置密码有效期 1.3历史命令限制1.3.1 减少记录命令…

C语言笔记 | 一元三次方程

文章目录 0x00 前言 0x01 问题分析 0x02 代码设计 0x03 完整代码 0x04 运行效果 0x05 参考文献 0x06 总结 0x00 前言 在 1545 年,意大利学者卡丹所写的《关于代数的大法》中,提出了一元三次方程的求根公式。人们将其称为卡丹公式。对于标准型的一…

港科夜闻|国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望...

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、国务院港澳办主任夏宝龙在香港科大考察期间,表示对学校开展创科工作的鼓励及希望。考察期间,夏宝龙主任参观了香港科大的空气动力学和声学实验中心,以及香港科大先进显示与光电子技术国…

4个 Python 库来美化你的 Matplotlib 图表

Matplotlib是一个被广泛使用的Python数据可视化库,相信很多人都使用过。 但是有时候总会觉得,Matplotlib做出来的图表不是很好看、不美观。 今天我就给大家分享四个美化Matplotlib图表的Python库,它们可以轻松让你的Matplotlib图表变得好看…

( “树” 之 DFS) 404. 左叶子之和 ——【Leetcode每日一题】

404. 左叶子之和 给定二叉树的根节点 root ,返回所有左叶子之和。 示例 1: 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24 示例 2: 输入: root [1]…

OpenGL入门教程之 深入理解

一、OpenGL简介 OpenGL是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程规范。OpenGL包含一系列可以操作图形和图像的函数,但OpenGL没有实现这些函数,OpenGL仅规定每个函数应该如何执行以及其输出值(类似接口),所以OpenGL仅是一…

基于JSP的网上购物系统的设计与实现(论文+源码)_kaic

摘 要 近些年来,社会的生产力和科技水平在不断提高,互联网技术也在不断更新升级,网络在人们的日常生活中扮演着一个重要角色,它极大地方便了人们的生活。为了让人们实现不用出门就能逛街购物,网络购物逐渐兴起慢慢变得…

新一代AI带来更大想象空间!上海将打造元宇宙超级场景!

引子 上海市经信委主任吴金城4月12日在“2023上海民生访谈”节目表示,上海将着力建设元宇宙智慧医院、前滩东体元宇宙、张江数字孪生未来之城等元宇宙超级场景。 吴金城说,新一代人工智能将带来更大的想象空间。比如,人工智能和元宇宙数字人的…

ESP32设备驱动-SHT20温湿度传感器驱动

SHT20温湿度传感器驱动 文章目录 SHT20温湿度传感器驱动1、SHT20介绍2、硬件准备3、软件准备4、驱动实现1、SHT20介绍 Sensirion 的 SHT20 湿度和温度传感器已成为外形尺寸和智能方面的行业标准:嵌入在 3 x 3mm 封装和 1.1mm 高度的可回流焊双扁平无引线 (DFN) 封装中,它提供…

项目人力资源管理

相关概念 组织结构图:用图形表示项目汇报关系。最常用的有层次结构图、矩阵图、文本格式的角色描述等3种。 任务分配矩阵(或称责任分配矩阵)(RAM):用来表示需要完成的工作由哪个团队成员负责的矩阵,或需要完成的工作与哪个团队成员有关的矩阵。 一、规划人力资源管理(编…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括: 原生方式,使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

zabbix客户端配置

一、zabbix客户端配置 1.实验环境:关闭防火墙和安全模块 systemctl disable --now firewalld setenforce 0 2.服务端和客户端都要时间同步 yum install -y ntpdate #注意安装需要用网络源安装,不能用本地源 ntpda…

google账号注册流程升级了!2023年谷歌gmail邮箱帐号注册申请教程(完整版)

google账号注册升级了! 2023年4月份google账号注册流程升级了,升级之前的版本是完成验证手机号码后才填写用户资料,升级之后的版本是需要先填写用户资料才能注册谷歌gmail邮箱帐号; 2023年谷歌gmail邮箱帐号注册申请教程 1、打开…