Shell特殊扩展变量的实践
博主名:李常明 博客地址:http://keep88.blog.51cto.com 此笔记出自老男孩书籍:跟老男孩学linux运维 shell编程实战 特殊扩展变量 1、${parameter:-word}功能实践 ${parameter:-word}的作用是如果parameter变量值为空或未赋值,则会返回word字符串替代变量的值 例如: [root@localhost~]#echo$test#>==此时test变量未赋值 [root@localhost~]#echo${test:-word}#>==可以看到test变量未赋值,输出了word,表明test变量为空,返回“-”后面定义的字符,但是需注意不会将word赋值给test变量,只是一个标识。 word [root@localhost~]#test="abc"#>==将test变量赋值abc,查看输出结果 [root@localhost~]#echo$test abc [root@localhost~]#echo${test:-word}#>==此时test变量有赋值,所以输出了test变量的值。 abc [root@localhost~]# 注释: ${parameter:-word} 中的冒号“:”是可以省去的。与上述结果无区别 2、${parameter:=word}功能实践: 判断parameter的变量是否有值,如果有值输出变量的值,如果未赋值,则将“-”后面的字符 word(自定义的)赋值给parameter变量 例如: [root@localhost~]#unsettest [root@localhost~]#echo$test#>==test变量未赋值 [root@localhost~]#A=${test:=word} [root@localhost~]#echo$A#>==未赋值,则将word赋值给变量test word 如果test变量有赋值,则直接输出test的变量 [root@localhost~]#test="5678" [root@localhost~]#echo$test 5678 [root@localhost~]#B=${test:=word} [root@localhost~]#echo$B#>==test变量有赋值,直接输出值,不会将word赋值给$test 5678 以上两个特殊变量的区别: ${parameter:-word}: 如果parameter有赋值,输出值,无赋值,输出"-"后定义的字符,不会赋值给变量parameter,只是显示信息 ${parameter:=word}: 如果parameter有赋值,输出值,无赋值,将"="后定义的字符,赋值给变量parameter 3、${parameter:?word}功能实践: 如果parameter变量未赋值,则提示错误信息为"?"后定义的字符,如果已赋值,则直接输出值 例如: [root@localhost~]#unsettest#>==取消test变量的赋值 [root@localhost~]#echo${test:?isnotvalue} -bash:test:isnotvalue#>==可以看到,未赋值情况下,输出了?后定义的错误信息 如果有赋值呢?查看结果: [root@localhost~]#test="abcdefg"#>==给test变量赋值 [root@localhost~]#echo$test abcdefg [root@localhost~]#echo${test:?testisnothavevalue} abcdefg#>==test变量有值的情况下,直接输出了值 4、${parameter:+word}功能实践 如果parameter未赋值,则输出空,如果parameter变量有赋值,则输出+ 后定义的信息,但是不会赋值给parameter变量 例如: [root@localhost~]#unsettest [root@localhost~]#echo$test [root@localhost~]#echo${test:+word}#>==test变量为赋值,输出了空 [root@localhost~]#test=aaaaaaa [root@localhost~]#echo${test:+word}#>==输出word,说明test变量有赋值,但不会将word赋值给test,只是输出信息,用于提示 word [root@localhost~]#echo$test#>==test变量还是最初定义的值 aaaaaaa 生产案例: 删除7天前的过期数据备份 如果忘记了定义path变量,又不希望path值为空值,就可以定义/tmp替代path空值的返回值, 例如: [root@localhost~]#catdelete.sh find${path-/tmp}-name*.tar.gz-typef-mtime+7|xargsrm-f [root@localhost~]#sh-xdelete.sh +xargsrm-f +find/tmp-name'*.tar.gz'-typef-mtime+7 如果path变量未设置,未空,则返回下列内容: [root@localhost~]#catdelete.sh find${path}-name*.tar.gz-typef-mtime+7|xargsrm-f [root@localhost~]#sh-xdelete.sh +xargsrm-f +find-name'*.tar.gz'-typef-mtime+7#>==此时执行脚本,就会报错 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |