LinuxShell——特殊符號

LinuxShell——特殊符號

摘要:本文主要學習了Shell命令中具備特殊功能的一些符號。shell

多命令執行

順序執行「;」

若是使用「;」鏈接多條命令,那麼這些命令會依次執行,可是各命令之間沒有任何邏輯關係,也就是說,不論哪條命令報錯了,後面的命令仍會依次執行。bash

舉個例子:學習

1 [root@localhost ~]# ls; cd /demo; pwd
2 anaconda-ks.cfg 3 -bash: cd: /demo: 沒有那個文件或目錄 4 /root 5 [root@localhost ~]#

能夠看到即使有命令執行錯誤,後面的命令仍然執行了。spa

邏輯與「&&」

若是使用「&&」鏈接多條命令,那麼這些命令之間就有邏輯關係了。只有第一條命令正確執行了,第二條命令纔會執行。若是$?返回值是0,則證實上一條命令正確執行,若是$?返回值不是0,則證實上一條命令執行錯誤。code

舉個例子:blog

1 [root@localhost ~]# cd /demo && pwd
2 -bash: cd: /demo: 沒有那個文件或目錄 3 [root@localhost ~]#

由於第一個命令執行失敗了,因此後面的命令不予執行。class

邏輯或「||」

若是使用「||」鏈接多條命令,則只有前一條命令執行錯誤,後一條命令才能執行。test

舉個例子:file

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
相關文章
相關標籤/搜索