LinuxShell——特殊符號 摘要:本文主要學習了Shell命令中具有特殊功能的一些符號。 多命令執行 順序執行“;” 如果使用“;”連接多條命令,那麼這些命令會依次執行,但是各命令之間沒有任何邏輯關係,也就是說,不論哪條命令報錯了,後面的命令仍會依次執行。 舉個例子: 可以看到即便有命令執行錯 ...
LinuxShell——特殊符號
摘要:本文主要學習了Shell命令中具有特殊功能的一些符號。
多命令執行
順序執行“;”
如果使用“;”連接多條命令,那麼這些命令會依次執行,但是各命令之間沒有任何邏輯關係,也就是說,不論哪條命令報錯了,後面的命令仍會依次執行。
舉個例子:
1 [root@localhost ~]# ls; cd /demo; pwd 2 anaconda-ks.cfg 3 -bash: cd: /demo: 沒有那個文件或目錄 4 /root 5 [root@localhost ~]#
可以看到即便有命令執行錯誤,後面的命令仍然執行了。
邏輯與“&&”
如果使用“&&”連接多條命令,那麼這些命令之間就有邏輯關係了。只有第一條命令正確執行了,第二條命令才會執行。如果$?返回值是0,則證明上一條命令正確執行,如果$?返回值不是0,則證明上一條命令執行錯誤。
舉個例子:
1 [root@localhost ~]# cd /demo && pwd 2 -bash: cd: /demo: 沒有那個文件或目錄 3 [root@localhost ~]#
因為第一個命令執行失敗了,所以後面的命令不予執行。
邏輯或“||”
如果使用“||”連接多條命令,則只有前一條命令執行錯誤,後一條命令才能執行。
舉個例子:
1 [root@localhost ~]# cd /demo || pwd 2 -bash: cd: /demo: 沒有那個文件或目錄 3 /root 4 [root@localhost ~]# cd /home || pwd 5 [root@localhost home]#
可以看到只有在第一個命令執行錯誤的情況下,第二個命令才會執行。
管道
應用場景
在執行shell命令的時候,會有數據輸出到屏幕上,在某些情況下還需要對輸出到屏幕上的數據進行處理,這時就需要用到管道了。
定義
管道命令是一種能接收標準輸出數據,併進行處理的命令。
管道命令使用“|”作為界定符,在界定符後面的命令就是管道命令,界定符前面的命令可以為非管道命令,但這個非管道命令必須要有標準輸出。
管道命令只能處理標準輸出,對於標準錯誤輸出會進行忽略,但可以在非管道命令里通過數據流重定向進行處理。
管道命令和多命令
管道命令要求前面一個命令必須要有標準輸出,而且要求後面一個命令必須能接收標準輸出。多命令對是否有標準輸出沒有要求。
舉例
如果想查看目錄下占用容量最大的5個目錄,就可以使用管道符實現:
1 [root@localhost /]# ls -lh -S | head -5 2 總用量 28K 3 drwxr-xr-x. 76 root root 8.0K 7月 15 12:07 etc 4 dr-xr-xr-x. 4 root root 4.0K 7月 3 16:17 boot 5 dr-xr-x---. 2 root root 4.0K 7月 7 00:47 root 6 drwxr-xr-x. 13 root root 4.0K 7月 3 16:09 usr 7 [root@localhost /]#
通配符
在BASH中,如果需要模糊匹配文件名或目錄名,就要用到通配符。
常用的通配符如下:
1 ?:匹配一個任意字元。 2 *:匹配0個或任意多個任意字元,也就是可以匹配任何內容。 3 []:匹配中括弧中任意一個字元。例如,[abc]代表一定匹配一個字元,或者是a,或者是b,或者是c。 4 [-]:匹配中括弧中任意一個字元,-代表一個範圍。例如,[a-z]代表匹配一個小寫字母。 5 [^]:邏輯非,表示匹配不是中括弧內的一個字元。例如,[^0-9]代表匹配一個不是數字的字元。
括弧
如果用於一串命令的執行,那麼小括弧和大括弧主要區別在於:
1 ()執行一串命令時,需要重新開啟一個子Shell來執行。{}執行一串命令時,在當前Shell中執行。 2 ()最後一條命令可以不用分號,{}最後一條命令要用分號。 3 ()里的各命令不必和括弧有空格,{}的第一條命令和左括弧之間必須有一個空格。 4 ()和{}都是把一串命令放田括弧裡面,並且命令之間用“;”隔開。 5 ()和{}中括弧裡面的某條命令的重定向隻影響該命令,但括弧外的重定向則會影響到括弧里的所有命令。
數據流重定向
平常我們在輸入的命令或者在屏幕上顯示的信息就是數據流。數據流重定向就是使輸入的命令信息來自於文件而不是終端的輸入,或者將輸出的數據傳輸到文件中而不在屏幕上顯示。
分類
輸入流重定向:將原本需要從鍵盤的輸入中獲取數據,改由從文件的內容中獲取。
輸出流重定向:將原本需要輸出到終端的數據,輸出到文件中,文件不存在則創建。
輸出流重定向
輸出流有兩種,分別是標準輸入和標準錯誤輸出:
1 標準輸出(stdout):輸出的信息是正確信息。代碼為1。使用>將導致文件內容被覆蓋,使用>>將在文件尾部追加。 2 標準錯誤輸出(stderr):輸出的信息是錯誤信息。代碼為2。使用>將導致文件內容被覆蓋,使用>>將在文件尾部追加。
舉個例子,將文件列表寫入trueFile,錯誤的結果將會顯示在屏幕上:
1 [root@localhost ~]# ls a b > trueFile
舉個例子,將正確的結果寫入trueFile,將錯誤的結果寫入falseFile:
1 [root@localhost ~]# ls a b > trueFile 2> falseFile
舉個例子,將正確的結果寫入trueFile,將錯誤的結果丟棄:
1 [root@localhost ~]# ls a b > trueFile 2> /dev/null
輸入流重定向
1 標準輸入(stdin):從鍵盤中輸入的信息。代碼為0。使用<後面接想要輸入的文件,使用<<後面接終止輸入的結束符。
舉個例子,將test文件中的內容輸入到file文件中:
1 [root@localhost ~]# cat > file < test
舉個例子,將鍵盤輸入的內容保存在file文件中,並且當輸入end的時候終止輸入,end不會被保存:
1 [root@localhost ~]# cat > file << end