dinggela 发表于 2018-8-26 12:34:51

Shell特殊扩展变量的实践

  博主名:李常明
  博客地址:http://keep88.blog.51cto.com
  此笔记出自老男孩书籍:跟老男孩学linux运维shell编程实战
  特殊扩展变量
  1、${parameter:-word}功能实践
  ${parameter:-word}的作用是如果parameter变量值为空或未赋值,则会返回word字符串替代变量的值
  例如:
# echo $test    #>==   此时test变量未赋值  

  
# echo ${test:-word}      #>==可以看到test变量未赋值,输出了 word,表明test变量为空,返回 “-”后面定义的字符,但是需注意 不会将word赋值给test变量,只是一个标识。
  
word
  
# test="abc"    #>==将test变量赋值 abc,查看输出结果
  
# echo $test
  
abc
  
# echo ${test:-word}   #>==此时test变量有赋值,所以输出了test变量的值。
  
abc
  
#
  注释:
  ${parameter:-word} 中的冒号“:”是可以省去的。与上述结果无区别
  2、${parameter:=word}功能实践:
  判断parameter的变量是否有值,如果有值输出变量的值,如果未赋值,则将“-”后面的字符 word(自定义的)赋值给parameter变量
  例如:
# unset test  
# echo $test#>==test变量未赋值
  

  
# A=${test:=word}
  
# echo $A   #>==   未赋值,则将word赋值给变量test
  
word
  

  
如果test变量有赋值,则直接输出test的变量
  
# test="5678"
  
# echo $test
  
5678
  
# B=${test:=word}
  
# echo $B   #>==test变量有赋值,直接输出值,不会将word赋值给$test
  
5678
  以上两个特殊变量的区别:
  ${parameter:-word}: 如果parameter有赋值,输出值,无赋值,输出"-"后定义的字符,不会赋值给变量parameter,只是显示信息
  ${parameter:=word}: 如果parameter有赋值,输出值,无赋值,将"="后定义的字符,赋值给变量parameter
  3、${parameter:?word}功能实践:
  如果parameter变量未赋值,则提示错误信息为"?"后定义的字符,如果已赋值,则直接输出值
  例如:
# unset test   #>==取消test变量的赋值  
# echo ${test:? is not value}
  
-bash: test:is not value    #>==可以看到,未赋值情况下,输出了? 后定义的错误信息
  如果有赋值呢?查看结果:
# test="abcdefg"   #>==   给test变量赋值  
# echo $test
  
abcdefg
  

  
# echo ${test:? testis not have value}
  
abcdefg    #>==   test变量有值的情况下,直接输出了值
  4、${parameter:+word}功能实践
  如果parameter未赋值,则输出空,如果parameter变量有赋值,则输出+ 后定义的信息,但是不会赋值给parameter变量
  例如:
# unset test  
# echo $test
  

  
# echo ${test:+word}       #>==test变量为赋值,输出了空
  

  
# test=aaaaaaa
  
# echo ${test:+word}#>==输出word,说明test变量有赋值,但不会将word赋值给test,只是输出信息,用于提示
  
word
  
# echo $test   #>==test变量还是最初定义的值
  
aaaaaaa
  生产案例:
  删除7天前的过期数据备份
  如果忘记了定义path变量,又不希望path值为空值,就可以定义/tmp替代path空值的返回值,
  例如:
# cat delete.sh  
find ${path- /tmp} -name *.tar.gz -type f -mtime +7 | xargs rm -f
  

  
# sh -x delete.sh
  
+ xargs rm -f
  
+ find /tmp -name '*.tar.gz' -type f -mtime +7
  

  
如果path变量未设置,未空,则返回下列内容:
  
# cat delete.sh
  
find ${path} -name *.tar.gz -type f -mtime +7 | xargs rm -f
  
# sh -x delete.sh
  
+ xargs rm -f
  
+ find -name '*.tar.gz' -type f -mtime +7#>==此时执行脚本,就会报错


页: [1]
查看完整版本: Shell特殊扩展变量的实践