shell脚本之子串及特殊变量扩展

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下的文件


版权声明:本文为molugy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。