liwya 发表于 2018-8-28 11:38:00

shell变量替换技术实践与生产实践

  ${value:-word}
  如果变量名存在且非null,则返回变量的值,否则返回word字符串。
  ${value:=word}
  如果变量名存在且非null,则返回变量的值,否则,设置这个变量值为word,并返回其值。
  ${value:?message}
  如果变量名存在且非null,则返回变量的值,否则显示变量名;message,并退出当前的命令或者shell
  范例: ${value:?"notdefined"} 如果value未定义,则显示-bash:value: not defined 并退出。
  ${value:+word}
  如果变量名存在且非null,则返回word,否则返回null。
  范例:${value:+word} 如果value已经定义,返回word(也就是真)
  1、${value:-word}
  当变量未定义或者值为空时候,返回值为word内容,否则返回变量的值
  # result=${cmz:-UNSET}#当cmz没有定义合作和是空会返回UNSET
  # echo $result
  UNSET
  # echo $cmz
  ==>这里是空。
  结论:当cmz没有内容时候就返回UNSET
  # cmz="caimengzhi"
  # result=${cmz:-UNSET} #之前必须声明cmz变量
  # echo $result
  caimengzhi
  结论:当cmz有内容时候就返回cmz的变量内容
  这个变量功能可以解决工字符串问题,变量没有定义。
  2、${value:=word}
  # result=${test:=UNSET}
  # echo $result
  UNSET
  # echo $test
  UNSET
  3、${value:?"not defined"}
  # result=${lmt:? not defined}
  -bash: lmt:not defined
  4、${value-word}去掉冒号
  也就是说当HTTPD不存在的时候将-后面的/usr/sbin/httpd赋值给等号前面的httpd
  对变量的路径进行操作,最好先判断路径是不是非空特别是删除操作。
  path=/server/backup
  find ${path:=/tmp/} -name "*.tar.gz" -type f | xargs rrm - f
  rm -rf ${path}
  一下很重要
  # vim d.sh
  # sh -x d.sh
  + find /tmp/ -name '*.tar.gz' -type f
  + xargs rrm - f
  xargs: rrm: No such file or directory
  + rm -rf
  # cat d.sh
  #path=/server/backup
  find ${path:=/tmp/} -name "*.tar.gz" -type f | xargs rrm - f
  #此时path没有定义 path路径将变为/tmp/
  rm -rf ${path}

页: [1]
查看完整版本: shell变量替换技术实践与生产实践