shell脚本之子串及特殊变量
| 表达式 | 说明 |
|---|---|
| ${parameter} | 返回变量$parameter的内容 |
| ${#parameter} | 返回变量$parameter内容的长度(按字符),也适用于特殊变量 |
| ${parameter:offset} | 在变量{$parameter}中,从位置offset之后开始提取子串到结尾 |
| ${parameter:offset:length} | 在变量{$parameter}中,从位置offset之后开始提取长度为length的子串 |
| ${parameter#word} | 从变量{$parameter}开头开始删除最短匹配的word子串 |
| ${parameter##word} | 从变量{$parameter}开头开始删除最长匹配的word子串 |
| ${parameter%word} | 从变量{$parameter}结尾开始删除最短匹配的word子串 |
| ${parameter%%word} | 从变量{$parameter}结尾开始删除最长匹配的word子串 |
| ${parameter//pattern/string} | 使用string代替所用匹配的pattern |
| ${{parameter/pattern/string} | 使用string代替第一个匹配的pattern |
字符串的特殊变量扩展
| 表达式 | 说明 |
|---|---|
| echo ${parameter:-word} | 如果parameter为空,则输出word,parameter本身没有发生变化;如果不为空输出parameter的值 |
| echo ${parameter:=word} | 如果parameter为空,则输出word,parameter已经赋予word的值;如果不为空输出parameter的值 |
| echo ${parameter:?word} | 如果parameter为空,则输出word,此时word将是错误输出的提示,echo $? 返回值为1;如果不为空输出parameter的值 |
| echo ${parameter:+word} | 如果parameter为空,则输出空,如果不为空输出word,parameter本身没有发生变化 |
康康实例
[root@backup ~]# echo ${a}
[root@backup ~]# echo ${a:-molu}
molu
[root@backup ~]# echo ${a:=molu}
molu
[root@backup ~]# echo ${a:+molu}
molu
[root@backup ~]# echo ${a:?molu}
molu
例题:删除7天的过期备份数据
如果忘记了定义path变量,又不希望path值为空,就可以定义/tmp代替path空值的返回值
[root@backup ~]# vi del.sh
[root@backup ~]# sh -x del.sh
+ xargs rm -f
+ find /tmp -name '*.tar.gz' -type f -mtime +7
[root@backup ~]# cat del.sh
#!/bin/bash
find ${path-/tmp} -name "*.tar.gz" -type f -mtime +7|xargs rm -f #执行时,系统会自动删除/tmp下的文件
本文深入探讨了Shell脚本中变量的高级用法,包括子串操作、特殊变量扩展和条件输出。通过实例演示了如何利用这些特性进行更复杂的字符串处理和条件判断,适合于想要提高Shell脚本编写技能的读者。

801

被折叠的 条评论
为什么被折叠?



