当前位置: 首页 > news >正文

Bash编程

目录:

  1. bash编程语法
  2. 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编程:

  1. 使用 bash 实现自动创建目录并生成文件。
  2. 使用 bash 判断目录是否存在。

 

 

相关文章:

Bash编程

目录&#xff1a; bash编程语法bash脚本编写 1.bash编程语法 Bash 编程基础 变量引号数组控制语句函数 Bash 变量 语法&#xff1a; Variable_namevalue Bash 变量定义的规则 变量名区分大小写&#xff0c;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 框架&#xff0c;运行在宿主平台之上&#xff0c;Flutter 本身是无法提供一些系统能力&#xff0c;比如使用蓝牙、相机、GPS等&#xff0c;因此要在 Flutter 中调用这些能力就必须和原生平台进行通信。 实现…...

重排链表——力扣143

文章目录 题目描述法一&#xff1a;寻找链表中点、链表逆序、链表合并 题目描述 法一&#xff1a;寻找链表中点、链表逆序、链表合并 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&#xff08;不符合实情&#xff0c;很多时候是查库获取的变量值&#xff09;使用原子类存储变量&#xff0c;保证一致性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对代理模式的理解 场景&#xff1a;拍电影的时候&#xff0c;替身演员去代理演员完成表演。这就是一个代理模式。 演员为什…...

桥梁安全生命周期监测解决方案

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

图技术在 LLM 下的应用:知识图谱驱动的大语言模型 Llama Index

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

SpringBoot自动配置、启动器原理爆肝解析(干货满满)

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

chrome扩展控制popup页面动态切换

文章目录 1、通过控制元素的显示隐藏达到popup页面切换的效果2、通过监听页面重新加载完成不同popup的切换3、直接修改popup页面location.href&#xff0c;无需刷新页面 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格式-三维漫游-室内导航测试

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

网络安全 Day19-计算机网络基础知识04(网络协议)

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

Verilog语法学习——LV5_位拆分与运算

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

❤️创意网页:创意动态画布~缤纷移动涂鸦~图片彩色打码

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…...

数值分析第六章节 用Python实现解线性方程组的迭代法

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

【低代码专题方案】使用iPaaS平台下发数据,快捷集成MDM类型系统

01 场景背景 伴随着企业信息化建设日趋完善化、体系化&#xff0c;使用的应用系统越来越多&#xff0c;业务发展中沉淀了大量数据。主数据作为数据治理中枢&#xff0c;保存大量标准数据库&#xff0c;如何把庞大的数据下发到各个业务系统成了很棘手的问题。 传统的数据下发方…...

驱动开发 day3 (模块化驱动启动led,蜂鸣器,风扇,震动马达)

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

数据结构与算法基础-学习-27-图之最短路径之Dijkstra(迪杰斯特拉)算法

一、最短路径应用案例 例如从北京到上海旅游&#xff0c;有多条路可以到目的地&#xff0c;哪条路线最短&#xff0c;哪条路线最省钱&#xff0c;就是典型的最短路径问题。 二、最短路径问题分类 最短路径问题可以分为两类&#xff0c;第一类为&#xff1a;两点间最短路径。第…...

Windows Server 2012 能使用的playwright版本

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

css实现溢出变为省略号

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

nginx如何配置两个服务器的连接

nginx 中通过server_name listen的方式配置多个服务器 nginx配置两个站点的windows操作方法&#xff0c;双域名双站点...

Linux环境Arduino IDE中配置ATOM S3

linux选择ubuntu发行版。 硬件设备有多小呢&#xff1a; 功能超级强大。 之前的ROS1和ROS2案例已经全部移植完成并测试结束&#xff08;三轮纯人力校验&#x1f60e;&#xff09;。 官网文档信息非常非常好&#xff1a; https://docs.m5stack.com/zh_CN/quick_start/atoms3…...

【C#】.Net Framework框架下的Authorize权限类

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

C++ list底层实现原理

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

C#实现数字验证码

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

Git的常用命令以及使用场景

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

tcp keepalive

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