shell中的置換

2021-06-29 00:57:51 字數 2538 閱讀 5478

shell中置換:檔名置換,變數置換,命令置換,算式置換

檔名置換:使用*, ?, [characters], !

如:ls abc* 列出以abc開頭的檔案或目錄

ls ch0?.doc 列出ch0x.doc形式檔名,x為單個字元

如果shell不能發現任何檔名可以匹配包含乙個?元字元的表示式,shell就會把?看作檔名中的字元,因為大多數檔名不會包括?字元,所以就會產生乙個錯誤訊息:no such file or directory

ls ch0[0123456789].doc ch00.doc到ch09.doc都會列出來

ls [a-z]* 列出所有以小寫字母開頭的檔名

ls [!a]* 列出所有不以字母a開頭的檔名

變數置換:

a="hello"

echo $a 輸出hello,變數置換的形式之一

在某些時刻我們經常需要判斷某個變數是否存在,若變數存在則使用既有的設定,若變數不存在則給予乙個常用的設定。

(1)變數未被設定或者內容為空,則替換為新的內容.

new_var=$

範例一:測試一下是否存在 username 這個髮量,若不存在則給予 username 內容為 root   

[root@www ~]# echo $username   

<==由於出現空白,所以 username 可能不存在,也可能是空字串   

[root@www ~]# username=$   

[root@www ~]# echo $username   

root       <==因為 username 沒有設定,所以給予為 root的內容。   

[root@www ~]# username="vbird tsai"   

[root@www ~]# username=$   

[root@www ~]# echo $username   

vbird tsai <==因為 username 已經設定了,所以使用舊有癿設定而不以 root取代  

上面的範例中,若username已經設定為空串的話,則不會替換,如果要想它進行次替換就可以用加上「:」,即# username=$

[html] 

範例二:若 username 未設定或者為空字串,則將 username 內容設定為 root   

[root@www ~]# username=""   

[root@www ~]# username=$   

[root@www ~]# echo $username   

<==因為 username 被設定為空字串了!所以當然還是保留為空字串!   

[root@www ~]# username=$   

[root@www ~]# echo $username   

root  <==加上『 : 』後若髮量內容為空或者是未設定,都能夠以後面癿內容替換。 

(2)"-"是不影響舊的內容,若想要替換新的內容則用「=」

[html] 

[root@www ~]# unset str; var=$   

[root@www ~]# echo var="$var", str="$str"   

var=newvar, str=newvar  <==因為 str 不存在,所以 var/str 均為 newvar   

測試:如果 str 已存在了,測試一下 var 會發怎樣?   

[root@www ~]# str="oldvar"; var=$   

[root@www ~]# echo var="$var", str="$str"   

var=oldvar, str=oldvar  <==因為str存在,所以var等於str的內容  

(3)如果我想知道,如果舊髮量不存在時,整個測試就告知我『有錯諢』,此時就能夠使用問號

[html] 

[root@www ~]# unset str; var=$   

-bash: str: 無此髮量    <==因為 str 不存在,所以輸出錯誤訊息   

(4)總結

命令置換:

`command` 使用反引號,而不是單引號,在此機制下,shell執行命令集合,然後將命令的輸出結果置換,如將乙個命令的輸出賦值給乙個變數:

date=`date`

users=`who | wc -l `

也可以使用命令置換來為其他的命令提供引數,如:

grep `id -un` /etc/passwd `id -un`輸出當前使用者的使用者名稱

算式置換:

其能使你用shell完成簡單的整數運算

用法:$((exp)) exp是乙個數學表示式,運算子:/,*,-,+,()

如果exp的計算結果不算乙個整數,則exp的值會被截去小數部分

echo $((5/2))輸出2

在圓括號的第乙個和最後乙個位置上不應該有任何空格出現,如:

$(( exp) ), $( (exp))均為錯誤用法

ref:    linux私房菜p 316

LINUX中,Shell 引數置換變數

1 name 當name2這個變數已經設定過了 就是說name2這個變數設定過值 則把它的值賦值給name。如果name2這個變數沒有設定過值,則把word當作name的值。2 name 當name2這個變數已經設定過了,就把name2的值賦值給name這個變數,如果name2沒有設定過,則把wor...

置換(用遞迴的方法執行置換)

置換 用遞迴的方式執行交換 include 利用巨集定義swap方法,交換 define swap x,y,t t x x y y t 宣告乙個函式 void perm char list,int k,int m int count int main void void perm char list...

Eclipse中設定換行

eclipse 使用系統內建的 text editor 做為文字編輯器,這個文字編輯器有乙個問題,就是文字無法換行。這個問題在顯示上給人們帶來不少麻煩。終於有人忍不住開發了乙個擴充套件外掛程式 wordwrap 這個外掛程式非常小,但是安裝這個外掛程式以後就可以輕鬆實現文字編輯器的自動換行功能了。安...