歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Shell中$()、$(())和${}的用法

在我們編寫shell的時候會有這樣一個種場景:

比如:我要備份passwd這個文件,備份到bak_path=”/mnt/sql_bak/” 這個路徑下。

且文件名為bak?

習慣上shell是這樣:

#!/bin/sh

bak_path="/mnt/bak/"

cp $/etc/passwd $bak_pathbak

但是這樣會發現$bak_pathbak 這個系統會把它作為一個變量名的,而不是根據上面變量,然後追加一個bak。實際上想解決這個問題有兩種辦法,一種 bak_path中最後不要加”/” 即 bak_path=”/mnt/bak”.

然後 cp $/etc/passwd $bak_path/bak 這樣即可。第二種就是今天要說的 ${} 。bak_path=”/mnt/bak” 路徑還是這個。下面cp $/etc/passwd ${bak_path}bak 這樣即可。

第二種場景 必須你shell中要對一個命令的結果做操作這時候就要用到$()

比如:我要對一個進程執行kill,我要關掉pid為1915這個tomcat

Shell中$()、$(())和${}的用法0

首先我得先拿到這個pid。ps -ef|grep java|egrep -o “[1-9]{4}”|head -n1 ,然後kill -9 pid 即可。

一條命令就是 kill -9 $(ps -ef|grep java|egrep -o “[1-9]{4}”|head -n1)即可。

補充一種場景比如你要計算25*125等於多少 (類似計算器運算) windows用戶會用calc調用系統計算器算。那linux呢 可以用echo $((25*125)) 就可以了。

另外關於${} 這個的用法不簡單限制於 變量限制擴展的功能,可以還可以用來切分字符串

比如str=”123″ 我要取23,正向取就是 echo ${str:1:2} 意思是從第一位往後開始不包括第一位,取兩位。

再比如str=”abc” 取bc,一樣 echo${str:1:2}

或者 echo ${str#*1} echo ${str#*a} 也可以。這個意思就是去掉1 左邊包括1;去掉a包括a。跟上面的區別在於上面的 1,2 都是對應字符的下標,而後面這種方法是指定字符串

這裡的#可以換成% 又是另一種結果,有興趣可以查詢下

Copyright © Linux教程網 All Rights Reserved