shell中变量的测试与替换

在某些时刻我们经常需要判断某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置。

(1)变量未被设置或者内容为空,则替换为新的内容.

        new_var=${old_var-content}

范例一:测试一下是否存在 username 这个变量,若不存在则给予 username 内容为 root 
[root@www ~]# echo $username 
           <==由于出现空白,所以 username 可能不存在,也可能是空字符串 
[root@www ~]# username=${username-root} 
[root@www ~]# echo $username 
root       <==因为 username 没有设定,所以给予为 root的内容。 
[root@www ~]# username="vbird tsai" 
[root@www ~]# username=${username-root} 
[root@www ~]# echo $username 
vbird tsai <==因为 username 已经设定了,所以使用旧有的设定而不以 root取代

上面的范例中,若username已经设定为空串的话,则不会替换,如果要想它进行次替换就可以用加上“:”,即# username=${username:-root}

范例二:若 username 未设定或者为空字符串,则将 username 内容设定为 root 
[root@www ~]# username="" 
[root@www ~]# username=${username-root} 
[root@www ~]# echo $username 
      <==因为 username 被设定为空字符串了!所以当然还是保留为空字符串! 
[root@www ~]# username=${username:-root} 
[root@www ~]# echo $username 
root  <==加上『 : 』后若变量内容为空或者是未设定,都能够以后面的内容替换。

 

(2)"-"是不影响旧的内容,若想要替换新的内容则用“=”

[root@www ~]# unset str; var=${str=newvar} 
[root@www ~]# echo var="$var", str="$str" 
var=newvar, str=newvar  <==因为 str 不存在,所以 var/str 均为 newvar 
 
测试:如果 str 已存在了,测试一下 var 会发怎样? 
[root@www ~]# str="oldvar"; var=${str=newvar} 
[root@www ~]# echo var="$var", str="$str" 
var=oldvar, str=oldvar  <==因为str存在,所以var等于str的内容

 

(3)如果我想知道,如果旧发量不存在时,整个测试就告知我『有错误』,此时就能够使用问号

[root@www ~]# unset str; var=${str?无此变量} 
-bash: str: 无此发量    <==因为 str 不存在,所以输出错误讯息 

 

(4)总结


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值