天天看點

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

繼續閱讀