Linux 系統中,「!」 符號或者操做符一般被用作邏輯否認的操做符,同時也經過一些調整和改動命令來從歷史記錄中找出你須要的命令行。下面演示的命令行在bash Shell中都已經明確檢查過可用了。不過我沒有在其餘的 Shell 解釋器下測試過,不過我相信這些命令也不會在其餘的解釋器下運行。那麼如今就讓咱們學習一下 「!」 這神奇而獨特的用法吧!linux
1.從歷史記錄中使用命令號來運行命令bash
你也許從沒意識到過能夠從命令行歷史記錄(以前執行過的命令)裏執行一條命令,首先輸入 「history」 命令獲得命令的序號。 ide
這時你能夠經過命令 history 的輸出中的命令序號來執行一條命令。學習
上面能夠看到它執行了號碼爲1551的 top 命令,這種執行方式對執行某些特別長的命令很是有用,你只要使用」!」符號加上命令的序號就能執行該命令啦。測試
2.執行指定的以前執行過的命令spa
你能夠運行 !-一、!-2 或者 !-7 等命令來執行你記錄序列中的倒數第一條命令、倒數第二條命令已經倒數第七條等等。。。和上面的方式同樣,你須要先用 history 命令來列出命令列表。其實這個命令很是有用,你能夠經過它來肯定沒有執行過某些錯誤命令好比 「rm command >file」 或者別的危險指令。這裏給出了執行倒數第六個、第八個和第十個命令的效果。firefox
3.向一條新命令傳遞舊命令的參數避免重複輸入命令行
好比說我須要列出 ‘/home/$USER/Binary/firefox’ 這個目錄。3d
可是這個時候我又想用 「ls-l「查看這個目錄下的具體信息,那麼我須要從新輸入上面的命令嗎?固然不須要,你只要用下面這個命令:blog
「!$」 符號能夠將上一條命令的參數傳遞給下一條命令參數:
4.如何用(!)處理兩個以上的參數?例如我在桌面上建立了一個 1.txt 文件
而後使用CP命令把它複製到 ‘home/avi/Downloads’ 目錄
這樣咱們就向CP命令傳遞了兩個參數。第一個是 ‘/home/avi/Desktop/1.txt’ ,第二個是’/home/avi/Downloads’,爲了區分它們,咱們 使用 echo 來打印每一個參數。
能夠注意到第一個參數可使用 「!^」 來表示,剩下的參數就可使用 「命令名:參數序號」這種方式來表示,好比 「!cp:2″。再舉個例子,若是你執行的某個命令爲 「xyz」,命令 後面有5個參數而你想調用第四個參數,就可使用 「!xyz:4″ 來調用它。固然,你可使用 「!* 「 來表示全部參數。
5.經過關鍵詞來執行以前的命令
咱們能夠經過執行關鍵詞來執行以前的命令。能夠按照下面的命令來理解:
上面是相同的ls命令對應了不一樣參數和文件夾。此外咱們將每個標準輸出都傳遞到了 ‘/dev/null’ 由於咱們並不但願處理程序的標準輸出。如今咱們能夠調用命令的關鍵詞來實現它們。
當你使用 「ls」 關鍵詞來執行以前命令的時候,你必定會被標準輸出給驚訝到。
6.很是實用的 !! 操做符
你可使用(!!)來運行或者改變以前的命令。它會調用最近使用的命令來調整當前命令,給你們展現一下使用場景。
昨天我運行了一個獲取IP的Shell命令:
忽然我意識到須要將結果重定向到 ip.txt 中,這時你應該想到用 「UP」 鍵恢復上一個命令再加上 ‘>ip.txt‘ 命令來重定向進去:
感謝此次救命的」UP」 鍵。那麼再考慮下這個場景,若是我須要運行下面的這個腳本:
當我運行它的時候忽然報出了」bash:ifconfig:command not found」錯誤,我意識到多是我設定了這個命令須要root權限來運行它。那麼如今怎麼辦?須要從新登陸root帳號來執行它麼?這種狀況下使用」up」鍵也並無論用。因此這裏咱們使用 「!!」 命令來選擇調用這條命令。
顯而易見的是 su 是用來選擇執行用戶的, -c 是用來表示執行具體命令的,最重要的部分 「!!」 代替了你最後一次運行的命令。而後輸入你的root密碼便可運行它了。
我相信下面的場景很是適合 「!!」 的使用。
當你使用普通的帳戶來執行 apt-get 的時候,經常會報錯提示你沒有權限執行。
哈哈不用擔憂,這時候就可使用下面的命令來成功執行了:
一樣有相似的場景:若是普通用戶沒有權限,便可這樣運行:
7.使用 !(文件名) 的方式來避免命令對某個文件的影響
這裏的 「!」 符號至關於邏輯否認來使用,用來避免對加了 「!」 前綴的文件產生影響。
A.從目錄中刪除除 2.txt 外的全部文件:
B.從目錄中刪除以 pdf 爲後綴的文件:
8.檢查某個目錄是否存在,若是存在就將其打印
這裏使用 ‘! -d’ 命令來判斷目錄是否爲空,同時使用 「&&」 和 「||」 命令來打印判斷目錄是否存在:
9.檢測目錄是不是否爲空,若是爲空則退出
和上面的命令相似。這裏是檢測目錄是否爲空,若是爲空則退出命令
10.檢測目錄是否爲空,若是爲空則在 home 目錄中從新建立目錄
來源:www.linuxstory.org 做者:Here or There