Bash编程
目录:
- bash编程语法
- bash脚本编写
1.bash编程语法
Bash 编程基础
- 变量
- 引号
- 数组
- 控制语句
- 函数
Bash 变量
语法:
Variable_name=value
Bash 变量定义的规则
- 变量名区分大小写,a和A为两个不同的变量。
- 变量名可以使用大小写字母混编的形式进行编写。
- 变量名与值之间的=两侧都不能有空格。
- 在读取或打印变量时,需使用$+变量名。
- 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。
Bash 数据类型
在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。
Bash 变量的类型
- 系统定义的变量
- 通常是以大写字母形式存在
- 如 BASH、SHELL等
- 用户定义的变量
- 多数以小写字母参与命名
- 但不具有大小写强制性规定
Bash 变量的定义与使用
letter_name="abc"
echo $letter_name
只读变量
a="123"
readonly a
删除变量
unset Variable_name
变量类型
字符串: your_name="Tom"
拼接字符串: greeting="hello, ${your_name},hello,hello"数组array name=(value0 value1 value2 value3)
- 取数组valuen=${array_name[n]}
- 单独赋值array name[0]=value0
字符串的拼接
基本语法
str3="${str1}${str2}"
Bash 引号
- 输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别
- 输出一个已定义的变量,则需要使用双引号
数组
数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合
数组初始化
- my_array=(A B "C" D)
- echo "第一个元素为:${my_array[0]}"
数组单个定义
- my_array[1]=B
- echo "数组的元素为: ${my_array[*]}"
- echo "数组的元素为: ${my_array[@]}"
索引数组的声明和赋值
declare -a Array_Name
# 索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2
或
Array_Name=( [index_1]=value_1 [index_2]=value_2 )
关联数组的声明和赋值
declare -A Array_Name
# 关联数组
Array_Name[name1]=value_1
Array_Name[name2]=value_2
或
Array_Name=( [name1]=value_1 [name2]=value_2 )
数组的访问
declare -a arr1=( hello world )
echo ${arr1[0]}
declare -A arr2=( [key1]=hello [key2]=world )
echo ${arr2[key1]}
取出所有元素
declare -a arr=( hello world )
echo ${arr[@]}
echo ${arr[*]}
数组的长度
declare -a arr=( hello world )
echo "arr length is ${#arr[@]}"
向数组中添加元素
declare -a arr=( hello world )
arr+=(Tom)
arr[5]=harry
echo ${arr[*]}
输出索引
declare -a arr=( hello world )
arr+=(Tom) arr[5]=harry
echo "arr indexs is ${!arr[@]}"
控制语句 if
# 单条件
if [ expression ];
then statements fi
# 多条件与
if [ expression_1 ] && [ expression_2 ];
then statements fi
# 多条件或
if [ expression_1 ] || [ expression_2 ];
then statements fi
# 多分支
if [ expression_1 ] ;
then statements
elif [ expression_2 ] ;
then statements
else
statements fi
循环语句 for
for variable in list
do
commands
done
//或
for (( expression1; expression2; expression3 ))
do
commands
done
for 循环范围
for num in {10..0..1}
do
echo $num
done
for 循环数组
arr=( "Welcome" "to" "zhangjiakou" )
for i in "${arr[@]}"
do
echo $i
done
for i in ${arr[@]}
do
echo $i
done
for i in ${arr[*]}
do
echo $i
done
for i in "${arr[*]}"
do
echo $i
done
表达式 for 循环
for ((i=1; i<=10; i++))
do
echo "$i"
done
while 循环
while [ expression ];
do
commands;
multiple commands;
done
i=1
while(($i<=5))
do
echo $i
let "i++"
done
break 与 continue
- break 语句可以终止 for 循环的重复性任务
- continue 语句在 for 循环中以特定条件跳过该条件下给定的特定语句
函数
function_name() { commands }
变量的作用域
- 默认情况下所有变量都定义为全局变量,即使在函数内部声明也是如此。
- local关键字在函数内部声明局部变量,该变量只能够在该函数内部使用。
返回值
- Bash 函数中,其返回值是执行的最后一个语句的状态。1-255(十进制)范围内表示失败,除此之外表示成功。
- 想要从函数中返回任意实际的值,最简单的选择是将函数的执行结果分配给一个全局变量
- 更好的选择是将值发送到 stdout 再打印输出
参数传递
- $0 为函数本身
- $1、2 · · ·n 参数传递的顺序位
- $#保存传递给函数的函数的位置参数或数量
- $$当前进程ID号
- $*或 $@保存传递给参数的所有位置参数或参数
- $?显示最后一个命令的退出状态,0表示正常,其他表示错误退出
2.bash脚本编写
read命令
- read命令是用于从终端或者文件中读取输入的内部命令。
- 读取整行输入
- 每行末尾的换行符不被读入
read命令使用
- 从标准输入读取输入并赋值给变量
- read var
- 从标准输入读取多个内容
- read var1 var2 var3
- 不指定变量(默认赋值给REPLY)
- read
脚本参数传递
- $0脚本名称
- $1~$n获取参数
- $#传递到脚本的参数个数。$$脚本运行的当前进程ID号
- $*以一个单字符串显示所有向脚本传递的参数
- $?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
算术运算
- a=10 b=20
- + 加法`expr $a +$b`结果为30
- - 减法‘expr $a - $b`结果为-10
- * 乘法`expr $a \* $b`结果为200
- / 除法‘expr $b / $a`结果为2
- % 取余‘expr $a % $b`结果为10
- = 赋值 a=$b 将把变量b的值赋给a
- == 相等相同则返回true: [ $a == $b ] 返回 false
- != 不相等不相同则返回true:[ $a !=$b ]返回true
- -eq 检测相等[ $a -eq $b ]返回false
- -ne 检测不相等[ $a -ne $b ]返回true
- -gt 检测左边是否大于右边「$a -gt $b ]返回false
- -lt 检测左边是否小于右边[ $a -lt $b ]返回true
- -ge 检测左边是否大于等于右边[$a -ge $b ]返回false
- -le 检测左边是否小于等于右边[ $a-le $b ]返回true
创建目录并生成文件
- mkdir test
- cd test
- echo "hello" > test.txt
- ls
Bash编程:
- 使用 bash 实现自动创建目录并生成文件。
- 使用 bash 判断目录是否存在。
相关文章:

Bash编程
目录: bash编程语法bash脚本编写 1.bash编程语法 Bash 编程基础 变量引号数组控制语句函数 Bash 变量 语法: Variable_namevalue Bash 变量定义的规则 变量名区分大小写,a和A为两个不同的变量。变量名可以使用大小写字母混编的形式进行…...

vue指令-v-model修饰符
vue指令-v-model修饰符 1、目标2、语法 1、目标 让v-modelv-mode拥有更强大的功能 2、语法 v-model.修饰符“Vue数据变量” .number 以parseFloat转成数字类型 .trime 去除首位空白字符 .lazy 在change时触发而非input时示例1 <template><div id"app"&g…...

【论文精读CVPR_2023】3D-Aware Face Swapping
【论文精读CVPR_2023】3D-Aware Face Swapping 前言Abstract1. Introduction2. Related WorkFace Swapping.3D-Aware Generative Models.GAN Inversion.3. Method3.1. Overview3.2. Inferring 3D Prior from 2D Images3.3. Face Swapping via Latent Code Manipulation3.4. Joi…...

flutter开发实战-自定义相机camera功能
flutter开发实战-自定义相机camera功能。 Flutter 本质上只是一个 UI 框架,运行在宿主平台之上,Flutter 本身是无法提供一些系统能力,比如使用蓝牙、相机、GPS等,因此要在 Flutter 中调用这些能力就必须和原生平台进行通信。 实现…...

重排链表——力扣143
文章目录 题目描述法一:寻找链表中点、链表逆序、链表合并 题目描述 法一:寻找链表中点、链表逆序、链表合并 void reorderList(ListNode* head){if(headnullptr){return;}// 找到中点 ListNode* mid FindMiddle(head);ListNode *h1head, *h2mid->ne…...

Lambda表达式常见的Local variable must be final or effectively final原因及解决办法
目录 Local variable must be final or effectively final错误原因 解决办法按照要求定义为final(不符合实情,很多时候是查库获取的变量值)使用原子类存储变量,保证一致性AtomicReference常用原子类 其它 Local variable must be …...

YOLOv5改进系列(16)——添加EMA注意力机制(ICASSP2023|实测涨点)
【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加...

[SSM]GoF之代理模式
目录 十四、GoF之代理模式 14.1对代理模式的理解 14.2静态代理 14.3动态代理 14.3.1JDK动态代理 14.3.2CGLIB动态代理 十四、GoF之代理模式 14.1对代理模式的理解 场景:拍电影的时候,替身演员去代理演员完成表演。这就是一个代理模式。 演员为什…...

桥梁安全生命周期监测解决方案
一、方案背景 建筑安全是人们生产、经营、居住等经济生活和人身安全的基本保证,目前我国越来越多的建筑物逐 步接近或者已经达到了使用年限,使得建筑物不断出现各种安全隐患,对居民的人身安全和财产安全产 生不利影响,因此房…...

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index
LLM 如火如荼地发展了大半年,各类大模型和相关框架也逐步成型,可被大家应用到业务实际中。在这个过程中,我们可能会遇到一类问题是:现有的哪些数据,如何更好地与 LLM 对接上。像是大家都在用的知识图谱,现在…...

SpringBoot自动配置、启动器原理爆肝解析(干货满满)
文章目录 前言一、SpringBoot优势概要二、SpringBoot自动配置1. ☠注意☠2.自动配置详解 三、Starter(场景启动器)原理总结 前言 本文详细解析面试重点—SpringBoot自动配置原理、场景启动器原理,深入源码,直接上干货、绝不拖泥带…...

chrome扩展控制popup页面动态切换
文章目录 1、通过控制元素的显示隐藏达到popup页面切换的效果2、通过监听页面重新加载完成不同popup的切换3、直接修改popup页面location.href,无需刷新页面 1、通过控制元素的显示隐藏达到popup页面切换的效果 下面在mv2版本的API下完成 实际上通过控制页面元素实…...

【AI】《动手学-深度学习-PyTorch版》笔记(三):PyTorch常用函数
AI学习目录汇总 1、torch.arange 返回一维张量(一维数组),官网说明,常见的三种用法如下 输入:torch.arange(5) 输出:tensor([0, 1, 2, 3, 4]) 输入:torch.arange(5, 16) 输出:tensor([ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]) 输入:torch.arange(1, 25, 2) …...

某文化馆三维建模模型-glb格式-三维漫游-室内导航测试
资源描述 某文化馆某个楼层的三维建模模型,glb格式,适用于three.js开发,可用来做一些三维室内漫游测试和室内导航测试 资源下载地址...

网络安全 Day19-计算机网络基础知识04(网络协议)
计算机网络基础知识04(网络协议) 1. ARP1.1 ARP通讯原理1.2 arp欺骗1.3 ARP欺骗与预防1.4 排查ARP病毒 2. DHCP工作原理(自动分配内网IP)3. TCP协议三次握手、四次挥手原理4. DNS协议工作原理 1. ARP Linux查看arp:ar…...

Verilog语法学习——LV5_位拆分与运算
LV5_位拆分与运算 题目来源于牛客网 [牛客网在线编程_Verilog篇_Verilog快速入门 (nowcoder.com)](https://www.nowcoder.com/exam/oj?page1&tabVerilog篇&topicId301) 题目 题目描述: 现在输入了一个压缩的16位数据,其实际上包含了四个数据…...

❤️创意网页:创意动态画布~缤纷移动涂鸦~图片彩色打码
✨博主:命运之光 🌸专栏:Python星辰秘典 🐳专栏:web开发(简单好用又好看) ❤️专栏:Java经典程序设计 ☀️博主的其他文章:点击进入博主的主页 前言:欢迎踏入…...

数值分析第六章节 用Python实现解线性方程组的迭代法
参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第5章 解线性方程组的迭代法 文章声明:如有发现错误,欢迎批评指正 文章目录 迭代法的基本概念雅可比迭代法与高斯-塞格尔迭代法雅可比迭代法高斯-塞格尔迭代法 迭代法的基本概念 6.1.1引言…...

【低代码专题方案】使用iPaaS平台下发数据,快捷集成MDM类型系统
01 场景背景 伴随着企业信息化建设日趋完善化、体系化,使用的应用系统越来越多,业务发展中沉淀了大量数据。主数据作为数据治理中枢,保存大量标准数据库,如何把庞大的数据下发到各个业务系统成了很棘手的问题。 传统的数据下发方…...

驱动开发 day3 (模块化驱动启动led,蜂鸣器,风扇,震动马达)
模块化驱动启动led,蜂鸣器,风扇,震动马达并加上Makefile 封装模块化驱动,可自由安装卸载驱动,便于驱动更新(附图) 1.安装模块驱动同时初始化各个设备并使能 2.该驱动会自动创建驱动节点. 3.通过c函数程序输入控制各个设备 4.卸载模块驱动 //编译驱动…...

数据结构与算法基础-学习-27-图之最短路径之Dijkstra(迪杰斯特拉)算法
一、最短路径应用案例 例如从北京到上海旅游,有多条路可以到目的地,哪条路线最短,哪条路线最省钱,就是典型的最短路径问题。 二、最短路径问题分类 最短路径问题可以分为两类,第一类为:两点间最短路径。第…...

Windows Server 2012 能使用的playwright版本
由于在harkua_bot里面使用到了playwright,我的服务器又是Windows Server 2012 R2,最新版playwright不支持Windows Server 2012 R2,支持Windows Server 2016以上,所以有了这个需求 https://cdn.npmmirror.com/binaries/playwright…...

css实现溢出变为省略号
单行文本溢出省略 text-overflow:规定当文本溢出时,显示省略符号来代表被修剪的文本 white-space:设置文字在一行显示,不能换行 overflow:文字长度超出限定宽度,则隐藏超出的内容overflow设为hidden&#…...

nginx如何配置两个服务器的连接
nginx 中通过server_name listen的方式配置多个服务器 nginx配置两个站点的windows操作方法,双域名双站点...

Linux环境Arduino IDE中配置ATOM S3
linux选择ubuntu发行版。 硬件设备有多小呢: 功能超级强大。 之前的ROS1和ROS2案例已经全部移植完成并测试结束(三轮纯人力校验😎)。 官网文档信息非常非常好: https://docs.m5stack.com/zh_CN/quick_start/atoms3…...

【C#】.Net Framework框架下的Authorize权限类
2023年,第31周,第3篇文章。给自己一个目标,然后坚持总会有收货,不信你试试! 在C#的.NET Framework中,你可以使用Authorize类来处理权限认证。Authorize类位于System.Web.Mvc命名空间中,它提供了…...

C++ list底层实现原理
文章目录 一、list底层实现二、类构成三、构造函数四、迭代器五、获取第一个元素六、获取最后一个元素七、插入元素 一句话:list底层实现一个双向循环链表 一、list底层实现 一个双向循环链表 二、类构成 class list : protected_List_base_list_base.lsit_impl…...

C#实现数字验证码
开发环境:VS2019,.NET Core 3.1,ASP.NET Core API 1、建立一个验证码控制器 新建两个方法Create和Check,Create用于创建验证码,Check用于验证它是否有效。 声明一个静态类变量存放列表,列表中存放包含令…...

Git的常用命令以及使用场景
文章目录 1.前言2.工作区,暂存区,版本库简介3.Git的常用命令4.版本回退5.撤销修改6.删除文件7.总结 1.前言 在学习Git命令之前,需要先了解工作区,暂存区和版本库这三个概念 2.工作区,暂存区,版本库简介 在使用Git进行版本控制时,有三个重要的概念:工作…...

tcp keepalive
tcp keepalive用于检查两者之间的链路是否正常,或防止链路断开。 一旦建立了TCP连接,该连接被定义为有效,直到一方关闭它。一旦连接进入连接状态,它将无限期地保持连接状态。但实际上,这种联系不会无限期地持续下去。如…...