发表于 2018-8-25 09:49:08

shell高级变量之变量的删除和替换案例

  最近在看zabbix server的启动脚本。有如下变量赋值:
  exec=/usr/local/zabbix/sbin/zabbix_server
  prog=${exec##*/}
  这里用到了shell高级变量的删除功能,这里是想要通过exec这个变量得到/usr/local/zabbix/sbin/zabbix_server的程序名称,即zabbix_server。
  1)${变量#关键词}    若变量内容从头开始的数据符合关键词,则将符合的最短数据删除
  如 prog=${exec#*/};echo $prog 将显示usr/local/zabbix/sbin/zabbix_server
  这里从头开始最短匹配任意字符到/的内容。
  2)${变量##关键词}   若变量内容从头开始的数据符合关键词,则将符合的最长数据删除
  如 prog=${exec##*/};echo $prog 将显示zabbix_server
  这里从头开始最长匹配任意字符到/的内容。
  这里如果不用shell高级变量的话,也可以用basename命令从/usr/local/zabbix/sbin/zabbix_server这个路径得到程序名zabbix_server
  prog=$(basename$exec);echo $prog这里同样将显示进程名zabbix_server
  3)${变量%关键词}    若变量内容从尾开始的数据符合关键词,则将符合的最短数据删除
  如要想得到/usr/local/zabbix/sbin/zabbix_server这个绝对路径的绝对路径目录可以用
  prog=${exec%zabbix_server};echo $prog 将显示/usr/local/zabbix/sbin/ 这里从变量的尾部开始最短匹配zabbix_server这个关键字然后删除。
  除了使用shell高级变量这里为了得到绝对路径目录也可以使用dirname命令获取
  prog=$(dirname $exec);echo $prog 同样将显示/usr/local/zabbix/sbin
  4)${变量%%关键词}若变量内容从尾开始的数据符合关键词,则将符合的最长数据删除
  如prog=${exec%%/*};echo $prog这里将把exec这个变量清空
  这里从exec这个变量末尾开始最长匹配/开头的任意字符串。
  5)${变量/旧字符串/新字符串}   若变量内容符合旧字符串,则第一个旧字符串被新字符串取代。
  如将/usr/local/zabbix/sbin/zabbix_server这个路径的第一个/变成#则可以用
  prog=${exec//\//#};echo $prog 将显示#usr/local/zabbix/sbin/zabbix_server 这里由于需要将/替换成#,所以/需要用\/转义一下
  6)${变量//旧字符串/新字符串}若变量内容符合旧字符串,则全部的旧字符串会被新字符串取代
  如将/usr/local/zabbix/sbin/zabbix_server这个路径的全部/变成#则可以用
  prog=${exec//\//#};echo $prog 将显示#usr#local#zabbix#sbin#zabbix_server

页: [1]
查看完整版本: shell高级变量之变量的删除和替换案例