shell注意点

变量命名:

注意,变量名和等号之间不能有空格,定义变量时,变量名不加美元符号$,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
不能以数字开头: 变量名不能以数字开头,但可以包含数字。
避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

实例

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

实例

for skill in Ada Coffe Action Java; doecho "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo "I am good at s k i l l S c r i p t " ,解释器就会把 skillScript",解释器就会把 skillScript",解释器就会把skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

推荐给所有变量加上花括号,这是个好的编程习惯。

Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

str='this is a string'

单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
单引号字符串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
实例

your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

输出结果为:

Hello, I know you are "runoob"! 

双引号的优点:

双引号里可以有变量
双引号里可以出现转义字符

your_name=“runoob”

使用双引号拼接

greeting=“hello, “$your_name” !”
greeting_1=“hello, ${your_name} !”
echo $greeting $greeting_1

使用单引号拼接

greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

输出结果为:

hello, runoob ! hello, runoob !  
hello, runoob ! hello, ${your_name} !  

这里证明双引号里可以有变量单引号字符串中的变量是无效的

获取字符串长度
实例

string="abcd"
echo ${#string}   # 输出 4

变量为字符串时,${#string} 等价于 ${#string[0]}:

实例

string="abcd"
echo ${#string[0]}   # 输出 4

提取子字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:

实例

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

注意:第一个字符的索引值为 0。

查找子字符串
查找字符 i 或 o 的位置(哪个字母先出现就计算哪个):

实例

string="runoob is a great site"
echo `expr index "$string" io`  # 输出 4

注意: 以上脚本中 ` 是反引号,而不是单引号 ',不要看错了哦。

shell 数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 值2 … 值n)
例如:

array_name=(value0 value1 value2 value3)
或者

array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制。

读取数组
读取数组元素值的一般格式是:

${数组名[下标]}
例如:

valuen=${array_name[n]}

使用 @ 符号可以获取数组中的所有元素,例如:

echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:

实例

取得数组元素的个数

length=${#array_name[@]}

或者

length=${#array_name[*]}

取得数组单个元素的长度

length=${#array_name[n]}

多行注释

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【text2sql】ReFSQL检索生成框架

论文标题为《ReFSQL: A Retrieval-Augmentation Framework for Text-to-SQL Generation》,发表在 EMNLP 2023 上。ReFSQL框架通过结构增强检索器来获取与当前问题语义和模式结构相似的样本,然后通过对比学习机制来引导模型学习到这些样本的特定知识&…

10款超实用的Sketch插件合集,别错过!

在 UI 界面设计领域,Sketch 以其高效、轻便的优势获得了不少设计团队的青睐,帮助全球设计师创造了许多妙不可言的作品。在使用 Sketch 的过程中,使用一些 辅助用的 Sketch 插件,可以让我们更加高效地完成设计任务。本文将将揭秘大…

jenkins中的allure和email问题梳理

一、allure相关 1、我安装了jenkins之后需要再安装allure吗?在jenkins插件中心直接安装allure 1.Allure Jenkins Plugin 只是一个集成插件,它要求你在 Jenkins 服务器上安装 Allure 命令行工具(Allure Commandline)来实际生成报…

Spring Boot教学资源库:从入门到精通

1绪 论 1.1研究背景 目前,在网络大环境下,越来越多高校开始实行网络教学,利用网络教学方式有利于学生更好的学习。 网络教学是指以计算机及网络为基础,来实现教学资源的上传、存储、传播和共享的教学手段。它是一种教学活动&#…

伪随机调制

伪随机调制是一种利用伪随机序列来调制信号的技术,广泛应用于现代通信系统中。其主要目的在于增强信号的抗干扰能力和隐蔽性,同时提升数据传输的安全性。以下是关于伪随机调制的详细介绍,包括原理、数学表达以及应用。 一、原理 1. 伪随机序…

ITSS-IT服务工程师和ITSS-IT服务经理的区别

培训目的差异:ITSS 服务项目经理的培训旨在为应对 IT 服务行业一线管理人员短缺的问题提供有力支持;而 ITSS 服务工程师的培训则致力于向 IT 服务业输送初级人才,协助企业将一部分内部成本转移至社会。 培训方向区分:ITSS 服务经理…

基于Springboot+Vue的智能推荐旅游平台 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

【Python】Conda离线执行命令

以下链接证明了想要离线使用conda命令的方法 启用离线模式 — Anaconda documentation 基本上大部分的命令都会提供网络选项 例如creat命令 conda create — conda 24.7.1 文档 - Conda 文档

英国商科毕业论文选题常见错误与解决思路

每到毕业季,英国商科毕业论文的选题和确定题目往往是留学生头痛的一大难题。如何有效确定英国毕业论文题目?如何避免题目中出现一些错误导致研究不能进行?在这篇文章中,翰思教育小编将逐一分析各种可能的问题以及如何避免这些问题…

12.JVM类加载机制

一、什么是JVM JVM是一种计算设备规范,虚构出的一个计算机,具有跨平台的特性; 包含类加载器、程序计数器、执行引擎、堆栈、方法区(元数据区)、本地方法栈 二、类加载全过程 加载过程如下:加载 --》验证…

Spring Cloud Netflix Hystrix 熔断器讲解和案例示范

在分布式微服务架构中,每个服务之间相互依赖,当某个服务出现故障或延迟时,如果没有有效的故障隔离机制,可能导致整个系统雪崩式的失败。Netflix Hystrix 作为一种熔断器模式,旨在通过隔离服务之间的调用,提…

bladex漏洞思路总结

Springblade框架介绍: SpringBlade是一个基于Spring Boot和Spring Cloud的微服务架构框架,它是由商业级项目升级优化而来的综合型项目。 0x1 前言 最近跟一些大佬学习了blade的漏洞,所以自己总结了一下,在渗透测试过程中&#x…

数据排列组合实现

示例 将以下几组数据 (“01”, “02”),(“A1”, “A2”, “A3”),(“B1”, “B2”),(“D1”, “D3”)排列组合成,如:01:…

如何利用phpstudy创建mysql数据库

phpStudy诞生于2007年,是一款老牌知名的PHP开发集成环境工具,产品历经多次迭代升级,目前有phpStudy经典版、phpStudy V8(2019版)等等,利用phpstudy可以快速搭建一个mysql环境,接下来我们就开始吧…

【纯前端实现xlsx的解析并处理成table需要的格式】

概要 xlsx纯前端导入并解析成json 整体架构流程 xlsx导入并解析成json,并与table中的数据进行对比,根据唯一标识更新对应数据项 技术名词解释 vue2xlsx 技术细节 首先下载xlsx依赖 npm install xlsx --save然后在需要导入xlsx的地方 这里主要用in…

【金九银十】笔试通关 + 小学生都能学会的堆排序

算法原理 堆排序是一种基于比较的排序算法,它利用了数据结构中的堆(Heap)。堆是一种特殊的完全二叉树,分为最大堆(Max-Heap)和最小堆(Min-Heap)。在最大堆中,每个父节点…

代码开发效率提升秘籍

🎁👉点击进入文心快码 Baidu Comate 官网,体验智能编码之旅,还有超多福利!🎁 理解代码 大部分的开发场景,不是自己从头开始写码,而是基于历史代码进行增量开发。历史代码往往经历多…

探寻vcruntime140.dll的奥秘:解决vcruntime140.dll相关程序运行故障的指南

今天这篇文章就来和大家聊聊关于丢失vcruntime140.dll文件的问题,分档你的电脑中随时了vcruntime140.dll文件时有什么办法可以将丢失vcruntime140.dll进行找回呢?有什么办法可以将丢失的vcruntime140.dll修复?vcruntime140.dll丢失导致电脑不…

四款阅读神器大比拼,福昕阅读器能否突围?

各位小伙伴们,今天来聊聊一款大家都熟悉的办公小助手——福昕PDF阅读器;作为一个每天与各种文件打交道的人,我对这款软件有着说不尽的“爱恨情仇”;当然,今天不只是来吐槽的,还要给大家推荐几款我个人觉得非…

留学生毕业论文设计问卷questionnaire的基本步骤

在上一期内容中,小编介绍了留学毕业论文的定量研究和相关的问卷设计。然而在一些研究中,定量研究和问卷数据并不能满足我们的研究需求。这种情况下,我们可以采取其他的数据收集方式,例如observation,case study和inter…