Shell 学习笔记 - 变量的删除、替换和替代 + 变量中的特殊符号

embedded/2024/10/25 12:21:36/

1.9 Shell 变量的删除、替换和替代

Linux 提供一些可以直接对变量进行操作的符号。通过这些符号,变量中的部分内容可以被删除、替换和替代。在 Shell 中,变量的删除、替换和替代也是非常重要的。通过简单操作修改变量,可以减少代码的行数并提高可读性。

1.9.1 Shell 变量的删除

变量删除的操作方法如下:

格式说明
${变量名#*关键字符}如果变量内容从头开始的数据符合 关键字符 ,则将符合的最短数据删除
${变量名##*关键字符}如果变量内容从头开始的数据符合 关键字符 ,则将符合的最长数据删除
${变量名%关键字符*}如果变量内容从尾开始的数据符合 关键字符 ,则将符合的最短数据删除
${变量名%%关键字符*}如果变量内容从尾开始的数据符合 关键字符 ,则将符合的最长数据删除

示例代码如下:

#!/bin/bash# 定义一个示例字符串
str="hello_world_hello_world"# 删除变量内容中从头开始的最短匹配的 'o',结果为 'hell_world_hello_world'
echo "${str#*o}"# 删除变量内容中从头开始的最长匹配的 'o',结果为 '_world_hello_world'
echo "${str##*o}"# 删除变量内容中从尾开始的最短匹配的 'o',结果为 'hello_world_hello_w'
echo "${str%o*}"# 删除变量内容中从尾开始的最长匹配的 'o',结果为 'hello_world_hello_w'
echo "${str%%o*}"

1.9.2 Shell 变量的替换

在日常工作中,常常需要判断某个变量是否存在。若变量存在则使用既有的配置,若变量不存在,则给予一个常用的配置。

变量替换的操作方式如下:

格式说明
${变量名/旧字符串/新字符串}若变量内容符合 旧字符串,则第一个 旧字符串 会被 新字符串 替换
${变量名//旧字符串/新字符串}若变量内容符合 旧字符串,则全部 旧字符串 会被 新字符串 替换

示例代码如下:

#!/bin/bash# 定义一个示例字符串
str="hello_world_hello_world"# 替换所有的 'o' 为 'x',结果为 'hellx_wxrld_hellx_wxrld'
echo "${str//o/x}"# 替换第一个 'o' 为 'x',结果为 'hellx_world_hello_world'
echo "${str/o/x}"

1.9.3 Shell 变量的自增

Shell 变量的自增运算符是 i++++i

  • i++ 表示先赋值再自加
  • ++i 表示先自加再赋值
#!/bin/bash# 定义一个示例变量
i=0# i++ 表示先赋值再自加,所以此时 i 的值为 0,输出 0
echo "i++ returns $((i++))"
# 输出结果为 0# 输出此时 i 的值为 1
echo "After i++, i is $i"
# 输出结果为 1# 重置示例变量
i=0# ++i 表示先自加再赋值,所以此时 i 的值为 1,输出 1
echo "++i returns $((++i))"
# 输出结果为 1# 输出此时 i 的值为 1
echo "After ++i, i is $i"
# 输出结果为 1

1.10 Shell 变量中的特殊符号

在Shell脚本中,有许多特殊符号用于不同的操作和功能。以下是一些常见的Shell变量中的特殊符号及其用途:

基本符号

  • $:用于引用变量。例如,$VAR表示变量VAR的值。
  • ${}:用于引用变量,尤其是在变量名后面紧跟非变量名字符时。例如,${VAR}123表示变量VAR的值加上字符串123

特殊变量

  • $0:当前脚本的名称。
  • $1$9:传递给脚本或函数的参数。$1 是第一个参数,$2 是第二个参数,依此类推。
  • $#:传递给脚本或函数的参数个数。
  • $*:传递给脚本或函数的所有参数,作为一个字符串。
  • "$@":传递给脚本或函数的所有参数,每个参数保持独立。
  • $?:最近一次命令的退出状态,0表示成功,非0表示失败。
  • $$:当前Shell进程的进程ID(PID)。
  • $_:最后一个命令的最后一个参数或最后一个命令的结果。

控制字符

  • ;:命令分隔符,用于在一行中执行多个命令。
  • &&:逻辑AND,用于连接两个命令,第一个命令成功时才执行第二个命令。
  • ||:逻辑OR,用于连接两个命令,第一个命令失败时才执行第二个命令。
  • &:将命令放入后台执行。
  • |:管道符,用于将一个命令的输出作为下一个命令的输入。

引号

  • ":双引号,引用字符串,可以包含变量和命令替换。
  • ':单引号,引用字符串,原样输出其中内容,不进行变量和命令替换。
  • `:反引号,用于命令替换,执行命令并将结果替换到当前位置。例如,`date`

重定向

  • >:输出重定向,将命令输出写入文件(覆盖)。
  • >>:输出重定向,将命令输出追加到文件末尾。
  • <:输入重定向,从文件读取命令输入。
  • 2>:错误输出重定向,将错误输出写入文件(覆盖)。
  • 2>>:错误输出重定向,将错误输出追加到文件末尾。
  • &>:将标准输出和错误输出都重定向到同一文件中。

括号

  • ():命令组,将一组命令放在子Shell中执行。
  • {}:命令块,在当前Shell中执行一组命令。

其他

  • *:通配符,匹配零个或多个字符。
  • ?:通配符,匹配单个字符。
  • [ ]:字符集,匹配方括号内的任意一个字符。

http://www.ppmy.cn/embedded/50277.html

相关文章

水土保持设计乙级资质升甲级的条件?

水土保持设计乙级资质升为甲级资质的具体条件可能因地区政策及行业标准更新有所变动&#xff0c;但一般会涉及以下几个关键方面&#xff1a; 企业综合能力&#xff1a; 企业应具有良好的社会信誉&#xff0c;无不良记录。注册资本要求通常更高&#xff0c;甲级资质可能要求注册…

Veeam Backup Enterprise Manager身份验证绕过漏洞(CVE-2024-29849)

一、漏洞概述【漏洞通告】 漏洞名称 Veeam Backup Enterprise Manager身份验证绕过漏洞 CVE ID CVE-2024-29849 漏洞类型 身份验证绕过 发现时间 2024-05-22 漏洞评分 9.8 漏洞等级 严重 攻击向量 网络 所需权限 无 利用难度 低 用户交互 无 PoC/EXP 已…

VRRP跟踪接口及认证(华为)

#交换设备 VRRP跟踪接口及认证 一、相关概念 1.VRRP跟踪接口 当 VRRP 的 Master 设备的上行接口出现问题, 而 Master 设备一直保持 Active 状态&#xff0c;那么就会导致网络出现中断&#xff0c;所以必须要使得 VRRP 的运行状态和上行接口能够关联。在配置了 VRRP 元余的网…

MPLS工作过程

数据层面&#xff1a; 1) 没有 MPLS 协议&#xff0c;基于 FIB 表正常转发即可 2) 名词&#xff1a;MPLS domain——MPLS 的工作半径 edge LSR(PE)——边界标签交换路由器 工作 mpls 域的边缘&#xff0c;连接域外设备 …

网络学习(三)TCP三次握手、四次挥手,及Wireshark抓包验证

目录 一、什么是 TCP 三次握手&#xff1f;二、什么是 TCP 四次挥手&#xff1f;三、Wireshark抓包验证3.1 如何捕获三次握手、四次挥手3.2 TCP 三次握手的记录3.3 数据传输3.4 TCP 四次挥手的记录 一、什么是 TCP 三次握手&#xff1f; TCP&#xff08;Transmission Control …

LeetCode-day09-419. 甲板上的战舰

LeetCode-day09-419. 甲板上的战舰 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ &#xff0c;返回在甲板 board 上放置…

什么是隐马尔可夫模型?

文章目录 一、说明二、玩具HMM&#xff1a;5′拼接位点识别三、那么&#xff0c;隐藏了什么&#xff1f;四、查找最佳状态路径五、超越最佳得分对齐六、制作更逼真的模型七、收获 关键词&#xff1a;hidden markov model 一、说明 被称为隐马尔可夫模型的统计模型是计算生物学…

【html】如何利用HTML+CSS制作自己的印章

大家有没有尝试过用HTML和CSS制作自己的印章. 首先印章具有两个最基本的特点就是它是圆形的并且有边框 当然它还有一些其他的属性吗&#xff0c;废话不多说我们直接上源码&#xff1a; 效果图&#xff1a; 源码&#xff1a; html&#xff1a; <!DOCTYPE html> <h…