十一:稍微認識一些厲害的家伙:特殊字符

          這里要介紹的是一堆特別的家伙,當然,這里是先打個照面,混臉熟,他們會在很多地方出現(xiàn),有著特殊的含義,執(zhí)行著特定的功能,這里就先叫他們”特殊字符“吧(注意在使用他們的時候不要使用中文輸入法,要不會出現(xiàn)問題)

          執(zhí)行命令的順序

          1:分號,“;”
          第一次接觸他的場景或許是在多命令順序執(zhí)行的時候。比如說你現(xiàn)在剛登陸系統(tǒng),你在家目錄下,你想查看一下/etc某個目錄下的內容,那么你需要cd,回車,如果層次深,那么你或許需要執(zhí)行多次,最后ls一下。有了分號的幫助,那么就可以這么寫

          cd /;cd etc;cd XXX;ls 
          命令之間使用分號隔開,你設置好的命令便會依次執(zhí)行。設想一下,你需要在你的Linux中搭建一個LAMP的web環(huán)境,在搭建環(huán)境的過程中你會有很多命令要執(zhí)行,你如果一次的去執(zhí)行他們,那么會花費你不少時間,因為完成當前命令執(zhí)行完畢你需要鍵入下一個命令,有人值守的安裝可是很痛苦的,如果這其中有了分號來幫助你實現(xiàn)命令的順序執(zhí)行,那么絕對會事半功倍。

          但是,使用分號來順序執(zhí)行命令有一個缺點,那就是一旦其中某個命令出錯,執(zhí)行的過程不會停止,依舊向后繼續(xù)執(zhí)行。這一點并不好,如果命令不涉及改變環(huán)境變量,搭建某某運行環(huán)境還好,一旦出錯,那么定位起來費時費力,所以分號最好使用在影響小的命令組合中。



          2:邏輯與,”&&“
          和一般編程語言中的邏輯與類似,他有著這樣的格式”命令1&&命令2“,如果命令1執(zhí)行沒有出錯,那么命令2才會執(zhí)行,后續(xù)命令依次類推,但是只要有一個命令報錯,便不會繼續(xù)向后執(zhí)行,執(zhí)行過程停留在報錯的命令上。這一個特性就比分號來得好,可以考慮使用它做一個通用的環(huán)境安裝腳本。

          3:邏輯或,”||“
          這里需要注意一下,和常見編程語言中的邏輯或不太一樣,編程語言中的邏輯或是”條件A或者條件B或者條件C等等條件N,這些條件中有一個滿足,則整個表達式成立“,這里的邏輯或的含義是”命令A||命令B,命令A執(zhí)行正確則不執(zhí)行命令B,反之亦然“


          *對于一個命令而言,如果能快速的得知是否執(zhí)行正確?你可以試試
          命令 && echo suc || echo fail
          對于一個你指定的命令,如果他執(zhí)行正確,那么邏輯與的echo suc便會執(zhí)行,邏輯或便不會執(zhí)行;倘若命令執(zhí)行失敗,那么邏輯與的echo suc便不會執(zhí)行,這樣一來,邏輯或的前半部分只有命令執(zhí)行失敗的結果,所以邏輯或的echo fail便會執(zhí)行。

          一些特殊字符會展開一些特殊內容
          1:匹配任意內容,“*”
          “*”在文件搜索的時候已經(jīng)有所接觸,是匹配任意字符的意思,但是那是限于文件搜索,如果我們使用echo命令來顯示“*”呢?我們會發(fā)現(xiàn),echo打印了當前目錄下的所有內容,而沒有打印“*”

          再試試ls *

          在含有“*”的命令中,shell會在執(zhí)行前將“*”解析為匹配的內容,所以echo不認識“*”,沒有打印他,ls 沒有因為沒有“*”這個目錄而報錯,進而正常顯示了當前目錄及其子目錄下的所有內容。
          其他相關的特殊符號可以在文件搜索的部分找到,戳我

          2:家目錄,“~”
          之前提過,使用“cd”和“cd ~”作用相同,都是定位到當前用戶的家目錄,如果你在波浪線前面指定一個用戶,那么會直接定位到該用戶的家目錄去,就像“cd ~duyt”。

          3:算術表達式,$((表達式))
          在表達式中可以填入整數(shù)運算的表達式,儼然一副計算器的樣子,算術表達式支持加減乘除,取余(%),求冪(**)等操作,其中,加減乘除取余,不再贅述,運算符和一般編程語言的相同,都是“+-*/”,求冪則寫為$((2**10)),這樣便會輸出2的10次方的結果。


          4:花括號匹配,{}
          這家伙和方括號“[]”有類似的地方,都能匹配括號里的內容,但是花括號更常見于這個場景:你需要新建一些文件,這些文件可能是你馬上使用的日志文件,或者學習筆記,甚至是日記,他們的文件名有類似有不同,不同可能是順序的日期或其他數(shù)字,那么花括號可以幫你完成這個工作。
          touch 2015-01-{01..31},這樣以來,會馬上新建以順序日期命名的文件,可以省去很多重復的工作。

          刪除的時候也可以使用花括號。

          花括號包含以下幾種形式
          1:{X,X,X},匹配多個字符,使用逗號隔開。
          2:{1..9},或者{A..Z}等其他類似的寫法,這樣寫會匹配一個范圍內的字符。
          3:{{X,X},{X,X}},嵌套匹配,這樣寫法,是會產(chǎn)生四種匹配的
          但是,花括號和方括號又有著不同,方括號重點在匹配上,而花括號重點在返回匹配的字符。


          這是,編程的感覺嗎?看看變量和引用

          1:變量定義
          好簡單的,“變量名=變量值”,在shell中直接鍵入var=helloworld,那么你就有了一個var變量!

          2:那么引用呢?
          也好簡單的,使用”$變量名”

          3:引用一個命令的結果,“或者$()
          比如:echo `ls`或者 echo $(ls),那么打印的將是當前目錄的內容

          當然了,演示的部分很簡單,只是使用了ls命令,引用可以用在更多復雜的命令組合和場景中。

          控制特殊字符的匹配
          1:雙引號
          雙引號可以用來控制參數(shù)個數(shù),排除部分特殊字符的作用。就參數(shù)個數(shù)而言,當你使用echo打印一些字符
          echo a b c    d,那么echo會接受4個參數(shù),打印之后,空格,制表符,換行符等把單詞分割為不同參數(shù)的多余字符會被過濾掉。


          當我們把含有分隔符號的參數(shù)使用雙引號引起來,單詞,或者說參數(shù)的分割就失效了,命令會把雙引號內的內容作為一個參數(shù)來看待。


          echo是如此,使用ls的時候,尤其是ls那些含有分隔符號的文件名的時候,雙引號就能幫你大忙了。
          但是在雙引號中,shell的特殊字符,除了 $,\ (反斜杠),和 `(倒引號)之外, 將會失去它們的特殊含義,被當作普通字符來看待。這就意味著,剛才提到的參數(shù)分割,星號(*)匹配, 波浪線(家目錄),和花括號匹配都將失效。參數(shù)引用,命令結果引用還有算術表達式仍然生效。


          2:單引號,完全失效!
          是的,單引號引起來的所有內容都會原樣輸出,所有特殊字符都會失效功能!

          3:轉義字符,反斜杠
          有些時候,顯示出個別特殊字符正式我們所需要的,這時候,反斜杠就可以幫到我們。就比如,過去我們常常聽到“襯衫的價格是九磅十五便士”,那么貨幣單位就有可能需要轉義,原樣顯示。當然了,美元符號才需要轉義,英鎊不需要。


          不過要注意,某些組合是有特殊含義的
          \t:按下tab鍵,這可是制表符
          \r:回車符號
          \n:新起一行
          \b:退格鍵
          目前,shell中一些任性的家伙我們已經(jīng)有了一個初步的認識。

          posted on 2015-07-07 17:19 都較瘦 閱讀(155) 評論(0)  編輯  收藏 所屬分類: Linux

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 广元市| 惠州市| 泰和县| 新昌县| 神农架林区| 察哈| 香港| 达日县| 遂溪县| 博湖县| 浙江省| 景德镇市| 甘孜县| 独山县| 青铜峡市| 冕宁县| 广丰县| 寿光市| 连山| 莎车县| 封开县| 阜阳市| 广灵县| 军事| 博白县| 嵊泗县| 名山县| 梁山县| 定州市| 柘城县| 托克逊县| 盐亭县| 黔东| 孝义市| 甘洛县| 博客| 台东市| 成武县| 微博| 香河县| 黑河市|