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





你可能感兴趣的:(删除,替换,shell高级变量)