| 運算符shell
管道符號,是unix一個很強大的功能,符號爲一條豎線:"|"。
用法:bash
command 1 | command 2spa
他的功能是把第一個命令command 1執行的結果做爲command2的輸入傳給command 2,例如:unix
$ls -s|sort -nr (請注意不要複製$符號進去哦)
code
-s 是file size,-n是numeric-sort,-r是reverse,反轉blog
該命令列出當前目錄中的文檔(含size),並把輸出送給sort命令做爲輸入,sort命令按數字遞減的順序把ls的輸出排序。排序
格式進程
command1 && command2
&&左邊的命令(命令1)返回真(即返回0,成功被執行)後,&&右邊的命令(命令2)纔可以被執行;換句話說,「若是這個命令執行成功&&那麼執行這個命令」。
語法格式以下:文檔
command1 && command2 && command3 ...
示例1中,cp命令首先從root的家目錄複製文件文件anaconda-ks.cfg到 /data目錄下;執行成功後,使用 rm 命令刪除源文件;若是刪除成功則輸出提示信息"SUCCESS"。字符串
示例1.jpg
格式
command1 || command2
||則與&&相反。若是||左邊的命令(command1)未執行成功,那麼就執行||右邊的命令(command2);或者換句話說,「若是這個命令執行失敗了||那麼就執行這個命令。
命令之間使用 || 鏈接,實現邏輯或的功能。
只有在 || 左邊的命令返回假(命令返回值 $? == 1),|| 右邊的命令纔會被執行。這和 c 語言中的邏輯或語法功能相同,即實現短路邏輯或操做。
只要有一個命令返回真(命令返回值 $? == 0),後面的命令就不會被執行。
示例2中,若是 dir目錄不存在,將輸出提示信息 fail 。
示例2.jpg
示例3中,若是 dir 目錄存在,將輸出 success 提示信息;不然輸出 fail 提示信息。
示例3.jpg
6.下面是一個shell腳本中經常使用的||組合示例
echo $BASH |grep -q 'bash' || { exec bash "$0" "$@" || exit 1; } 系統調用exec是以新的進程去代替原來的進程,但進程的PID保持不變。所以,能夠這樣認爲,exec系統調用並無建立新的進程,只是替換了原來進程上下文的內容。原進程的代碼段,數據段,堆棧段被新的進程所代替。
若是但願把幾個命令合在一塊兒執行,shell提供了兩種方法。既能夠在當前shell也能夠在子shell中執行一組命令。
格式:
(command1;command2;command3....) 多個命令之間用;分隔
示例4中,若是目錄dir不存在,則執行命令組合。
示例4.jpg
若是使用{}來代替(),那麼相應的命令將在子shell而不是當前shell中做爲一個總體被執行,只有在{}中全部命令的輸出做爲一個總體被重定向時,其中的命令才被放到子shell中執行,不然在當前shell執行。
它的通常形式爲:
{ command1;command2;command3… } 注意:在使用{}時,{}與命令之間必須使用一個空格
示例5中,使用{}則在子shell中執行了打印操做
做者:shu_ke 連接:https://www.jianshu.com/p/617c1ee1e46e 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
格式
command1 && command2
&&左邊的命令(命令1)返回真(即返回0,成功被執行)後,&&右邊的命令(命令2)纔可以被執行;換句話說,「若是這個命令執行成功&&那麼執行這個命令」。
語法格式以下:
command1 && command2 && command3 ...
示例1中,cp命令首先從root的家目錄複製文件文件anaconda-ks.cfg到 /data目錄下;執行成功後,使用 rm 命令刪除源文件;若是刪除成功則輸出提示信息"SUCCESS"。
示例1.jpg
格式
command1 || command2
||則與&&相反。若是||左邊的命令(command1)未執行成功,那麼就執行||右邊的命令(command2);或者換句話說,「若是這個命令執行失敗了||那麼就執行這個命令。
命令之間使用 || 鏈接,實現邏輯或的功能。
只有在 || 左邊的命令返回假(命令返回值 $? == 1),|| 右邊的命令纔會被執行。這和 c 語言中的邏輯或語法功能相同,即實現短路邏輯或操做。
只要有一個命令返回真(命令返回值 $? == 0),後面的命令就不會被執行。
示例2中,若是 dir目錄不存在,將輸出提示信息 fail 。
示例2.jpg
示例3中,若是 dir 目錄存在,將輸出 success 提示信息;不然輸出 fail 提示信息。
示例3.jpg
6.下面是一個shell腳本中經常使用的||組合示例
echo $BASH |grep -q 'bash' || { exec bash "$0" "$@" || exit 1; } 系統調用exec是以新的進程去代替原來的進程,但進程的PID保持不變。所以,能夠這樣認爲,exec系統調用並無建立新的進程,只是替換了原來進程上下文的內容。原進程的代碼段,數據段,堆棧段被新的進程所代替。
若是但願把幾個命令合在一塊兒執行,shell提供了兩種方法。既能夠在當前shell也能夠在子shell中執行一組命令。
格式:
(command1;command2;command3....) 多個命令之間用;分隔
示例4中,若是目錄dir不存在,則執行命令組合。
示例4.jpg
若是使用{}來代替(),那麼相應的命令將在子shell而不是當前shell中做爲一個總體被執行,只有在{}中全部命令的輸出做爲一個總體被重定向時,其中的命令才被放到子shell中執行,不然在當前shell執行。
它的通常形式爲:
{ command1;command2;command3… } 注意:在使用{}時,{}與命令之間必須使用一個空格
示例5中,使用{}則在子shell中執行了打印操做
邏輯非 ! 條件表達式的相反
if [ ! 表達式 ]
if [ ! -d $num ] 若是不存在目錄$num
邏輯與 –a 條件表達式的並列
if [ 表達式1 –a 表達式2 ]
邏輯或 -o 條件表達式的或
if [ 表達式1 –o 表達式2 ]
if [ -z "$JHHOME" -a -d $HOME/$num ]
做者:shu_ke 連接:https://www.jianshu.com/p/617c1ee1e46e 來源:簡書