标签搜索

shell脚本变量子串和变量扩展【进阶篇】

lilymaxyz
2024-10-31 / 0 评论 / 6 阅读 / 正在检测是否收录...

@TOC

1.特殊位置变量

符号含义应用
$0脚本的名字出现故障提示 使用帮助一般与$#
$n(n数字)脚本的第几个参数 传参桥梁(命令行 传递到 脚本中
/etc/init.d/network start
$#脚本参数的个数判断参数个数是否正常
$*取出所有的参数 加上双引号:相当于是1个整体 1个参数循环或数组
$@取出所有的参数 加上双引号:就是每个都是独立循环或数组

2.特殊变量之状态

符号含义
$?上一条命令
0 正常
非0 失败
判断各种东西执行 服务是否成功 配合判断
$$当前运行脚本的pid在脚本中把pid记录到文件 方便后面进行kill
$!上一个运行的脚本的pid
$_上一个命令或脚本的最后一个参数 esc+._(下划线)环境变量

3.变量子串

  • 格式${xxxxx}
  • 主要作用:变量子串效率比使用相应的命令 效率更高
  • 提前说明:parameter 变量名字(参数)
  • 使用的时候 遇到 含义 去哪里查找
  • man bash 参考Parameter Expansion
内容parameter变量含义
基本
${parameter}返回变量的内容
${#parameter}返回变量$parameter的长度
按照范围cut截取
${parameter:offset}在$parameter中,从位置offset之后开始提取子串
${parameter:offset:length}在$parameter中,从位置offset之后开始提取长度为length的子串
删除(sed)
${parameter#world}从变量$parameter的开头,删除匹配word的子串
${parameter##world}从变量$parameter的开头,删除匹配word的子串
${parameter%world}从变量$parameter的结尾,删除匹配word的子串
${parameter%%world}从变量$parameter的结尾,删除匹配word的子串
替换(sed)
${parameter/pattern/string}使用string来代替第一个匹配的pattern
${parameter//pattern/string}使用string代替所有匹配的pattern

3.1.统计变量中内容的字数(字符数)

在这里插入图片描述

3.2.统计字符数方法

在这里插入图片描述
在这里插入图片描述

3.3.面试题:I am a student,welcome to our traning study.显示这串字符串中单词字数大于6的单词

在这里插入图片描述

3.4.按照范围cut截取切片

  • ${变量:起点} 从起点显示到结束
  • ${变量:起点:长度} 从起点显示最多“长度”个字符
  • 顾头不顾尾

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5.字符删除

  • ${变量#内容} 边开始(开头)
  • ${变量%内容} 边开始(结尾)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.6.取出文件名和文件路径【效率高】

在这里插入图片描述

3.7.字符替换(sed)

  • 不支持正则表达式,目前只能支持通配符 * {} [0-9] [a-z] [A-Z]
| ${parameter/pattern/string}      | 使用string来代替第一个匹配的pattern |
| ${parameter//pattern/string}     | 使用string代替所有匹配的pattern     |

在这里插入图片描述
在这里插入图片描述

4.变量扩展

  • 给变量设置==默认值==
内容含义
${parameter:-word}如果parameter没有被赋值或者其值为空,那么就以word作为其值
${parameter:=word}如果parameter没有被赋值或者其值为空,那么就以word作为其值,并且将word赋值给parameter
${parameter:?word}如果parameter没有被赋值或者其值为空,那么就以word作为错误输出.否则显示parameter内容
${parameter:+word}如果parameter没有被赋值或者其值为空,就什么都不做。否则用word替换变量内容

在这里插入图片描述

5.小结

[19:57:12 root@backup ~]# ll /etc/init.d/functions /etc/init.d/network
-rw-r--r--. 1 root root 18281 May 22  2020 /etc/init.d/functions
-rwxr-xr-x. 1 root root  7928 May 22  2020 /etc/init.d/network

endl

0

评论

博主关闭了所有页面的评论