Shell特殊扩展变量的实践
2017-06-05 23:18
435 查看
博主名:李常明
博客地址:http://keep88.blog.51cto.com
此笔记出自老男孩书籍:跟老男孩学linux运维 shell编程实战
特殊扩展变量1、${parameter:-word}功能实践
${parameter:-word}的作用是如果parameter变量值为空或未赋值,则会返回word字符串替代变量的值
例如:
${parameter:-word} 中的冒号“:”是可以省去的。与上述结果无区别
2、${parameter:=word}功能实践:
判断parameter的变量是否有值,如果有值输出变量的值,如果未赋值,则将“-”后面的字符 word(自定义的)赋值给parameter变量
例如:
以上两个特殊变量的区别:
${parameter:-word}: 如果parameter有赋值,输出值,无赋值,输出"-"后定义的字符,不会赋值给变量parameter,只是显示信息
${parameter:=word}: 如果parameter有赋值,输出值,无赋值,将"="后定义的字符,赋值给变量parameter
3、${parameter:?word}功能实践:
如果parameter变量未赋值,则提示错误信息为"?"后定义的字符,如果已赋值,则直接输出值
例如:
4、${parameter:+word}功能实践
如果parameter未赋值,则输出空,如果parameter变量有赋值,则输出+ 后定义的信息,但是不会赋值给parameter变量
例如:
生产案例:
删除7天前的过期数据备份
如果忘记了定义path变量,又不希望path值为空值,就可以定义/tmp替代path空值的返回值,
例如:
博客地址: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 ~]# unset test [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 ~]# unset test #>== 取消test变量的赋值 [root@localhost ~]# echo ${test:? is not value} -bash: test: is not value #>== 可以看到,未赋值情况下,输出了? 后定义的错误信息如果有赋值呢?查看结果:
[root@localhost ~]# test="abcdefg" #>== 给test变量赋值 [root@localhost ~]# echo $test abcdefg [root@localhost ~]# echo ${test:? test is not have value} abcdefg #>== test变量有值的情况下,直接输出了值
4、${parameter:+word}功能实践
如果parameter未赋值,则输出空,如果parameter变量有赋值,则输出+ 后定义的信息,但是不会赋值给parameter变量
例如:
[root@localhost ~]# unset test [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 ~]# cat delete.sh find ${path- /tmp} -name *.tar.gz -type f -mtime +7 | xargs rm -f [root@localhost ~]# sh -x delete.sh + xargs rm -f + find /tmp -name '*.tar.gz' -type f -mtime +7 如果path变量未设置,未空,则返回下列内容: [root@localhost ~]# cat delete.sh find ${path} -name *.tar.gz -type f -mtime +7 | xargs rm -f [root@localhost ~]# sh -x delete.sh + xargs rm -f + find -name '*.tar.gz' -type f -mtime +7 #>== 此时执行脚本,就会报错
相关文章推荐
- shell 变量特殊扩展:示例
- shell中的参数扩展, 特殊变量
- shell中的参数扩展, 特殊变量
- shell中的参数扩展, 特殊变量
- Shell编程-03-Shell中的特殊变量和扩展变量
- shell特殊变量的介绍
- shell特殊变量
- Shell变量名使用的特殊字符 [转]
- shell中的一些特殊变量
- shell学习笔记--特殊变量参数
- shell脚本及makefile中的特殊变量
- [Unix]shell编程珠玑(3)--shell 特殊变量
- shell 笔记 特殊变量 特殊字符 Metacharacters
- 老大让我学Linux之test指令,expr指令,Shell特殊变量
- 总结linux环境几个特殊的shell变量
- shell脚本学习:特殊变量和C语言格式循环
- shell中的特殊变量
- shell中的一些特殊变量 [转]
- Shell变量名使用的特殊字符
- 关于SHELL中一些特殊的$打头的特殊变量