1. 程式人生 > >shell 中| && || () {} 用法以及shell的邏輯與或非

shell 中| && || () {} 用法以及shell的邏輯與或非

| 運算子

管道符號,是unix一個很強大的功能,符號為一條豎線:”|”。

用法:

command 1 | command 2

他的功能是把第一個命令command 1執行的結果作為command2的輸入傳給command 2。

例如:

$ls -s|sort -nr (請注意不要複製$符號進去哦)

-s 是 file size,-n 是 numeric-sort,-r 是 reverse,反轉
該命令列出當前目錄中的文件(含size),並把輸出送給sort命令作為輸入,sort命令按數字遞減的順序把ls的輸出排序。

&& 運算子

用法:

command1  && command2

&&左邊的命令(命令1)返回真(即返回0,成功被執行)後,&&右邊的命令(命令2)才能夠被執行;換句話說,“如果這個命令執行成功&&那麼執行這個命令”。

語法格式如下:

command1 && command2 && command3 ...
  1. 命令之間使用 && 連線,實現邏輯與的功能。
  2. 只有在 && 左邊的命令返回真(命令返回值 $? == 0),&& 右邊的命令才會被執行。
  3. 只要有一個命令返回假(命令返回值 $? == 1),後面的命令就不會被執行。

這裡寫圖片描述
上面圖示中,cp 命令首先從 root 的根目錄複製檔案檔案 anaconda-ks.cfg 到 /data目錄下;執行成功後,使用 rm 命令刪除原始檔;如果刪除成功則輸出提示資訊”SUCCESS”。

|| 運算子:

格式:

command1 || command2

|| 則與 && 相反。如果 || 左邊的命令(command1)未執行成功,那麼就執行 || 右邊的命令(command2);或者換句話說,“如果這個命令執行失敗了 || 那麼就執行這個命令。

  1. 命令之間使用 || 連線,實現邏輯或的功能。
  2. 只有在 || 左邊的命令返回假(命令返回值 $? == 1),|| 右邊的命令才會被執行。這和 c 語言中的邏輯或語法功能相同,即實現短路邏輯或操作。
  3. 只要有一個命令返回真(命令返回值 $? == 0),後面的命令就不會被執行。

這裡寫圖片描述
上面圖示中,如果 dir目錄不存在,將輸出提示資訊 fail 。

這裡寫圖片描述
上面圖示中,如果 dir 目錄存在,將輸出 success 提示資訊;否則輸出 fail 提示資訊。

下面是一個 shell 指令碼中常用的 || 組合示例

echo $BASH |grep -q 'bash' || { exec bash "$0" "[email protected]" || exit 1; }

系統呼叫 exec 是以新的程序去代替原來的程序,但程序的 PID 保持不變。因此,可以這樣認為,exec 系統呼叫並沒有建立新的程序,只是替換了原來程序上下文的內容。原程序的程式碼段,資料段,堆疊段被新的程序所代替。

() 運算子

如果希望把幾個命令合在一起執行,shell提供了兩種方法。既可以在當前shell也可以在子shell中執行一組命令。
格式:

(command1;command2;command3....)               # 多個命令之間用 ; 分隔
  1. 一條命令需要獨佔一個物理行,如果需要將多條命令放在同一行,命令之間使用命令分隔符(;)分隔。執行的效果等同於多個獨立的命令單獨執行的效果。
  2. () 表示在當前 shell 中將多個命令作為一個整體執行。需要注意的是,使用 () 括起來的命令在執行前面都不會切換當前工作目錄,也就是說命令組合都是在當前工作目錄下被執行的,儘管命令中有切換目錄的命令。
  3. 命令組合常和命令執行控制結合起來使用。

這裡寫圖片描述
上面圖示中,如果目錄dir不存在,則執行命令組合。

{} 運算子

如果使用 {} 來代替 (),那麼相應的命令將在子 shell 而不是當前 shell 中作為一個整體被執行,只有在 {} 中所有命令的輸出作為一個整體被重定向時,其中的命令才被放到子 shell 中執行,否則在當前 shell 執行。
它的一般形式為:

{ command1;command2;command3… } 

注意:在使用 {} 時,{} 與命令之間必須使用一個空格

這裡寫圖片描述
上面圖示中,使用 {} 在子 shell 中執行了列印操作

shell的邏輯與或非

邏輯非 ! 條件表示式的相反

if [ ! 表示式 ]
if [ ! -d $num ]        如果不存在目錄$num

邏輯與 –a 條件表示式的並列

if [ 表示式1a  表示式2 ]

邏輯或 -o 條件表示式的或

if [ 表示式1  –o 表示式2 ]
    表示式與前面的=  != -d –f –x -ne -eq -lt等合用
    邏輯符號就正常的接其他表示式,沒有任何括號( ),就是並列
if [ -z "$JHHOME" -a -d $HOME/$num ]
    注意邏輯與-a與邏輯或-o很容易和其他字串或檔案的運算子號搞混了

相關推薦

shell | && || () {} 用法以及shell邏輯

| 運算子 管道符號,是unix一個很強大的功能,符號為一條豎線:”|”。 用法: command 1 | command 2 他的功能是把第一個命令command 1執行的結果作為command2的輸入傳給command 2。 例如:

Python以及邏輯短路

Python中的與或非以及邏輯短路 python3.7 Shawn 文件: https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not 文章目錄 Pyt

Shell反引號(`)$()用法的區別

今天有人提問: echo `echo \\\\\\\w` echo $(echo \\\\\\\w) 為什麼輸出的不一樣? 這就引申出了另一個問題:反引號與$()有沒有區別? 這是一個非常有意思的問題,但要解釋這個問題確比較困難,我來換一個簡單一點的例子,通俗的解

Shell ${} 用法和例項

Shell中 ${} 用法和例項 檔案路徑(如下): /dir1/dir2/dir3/my.file.txt 1. 截斷功能 ${file#*/}:   拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my

shell${}用法

${}配合#及%使用達到字串中特定位置字元刪除操作 假設有一個變數: file=/dir1/dir2/fir3/my.file.txt 1、使用${}刪除特定位置字元後得到不同的值 ${file#*/}:刪掉第一個/及其左邊的字串 結果 -- dir1/dir2/d

java邏輯(&/|)和簡潔(&&/||)的簡單區別

1、& 稱為邏輯與,只有兩個運算元都是true,結果才是true。      && 稱為簡潔與或者短路與,也是隻有兩個運算元都是true,結果才是true。但是如果左邊運算元為false,就不計算右邊的表示式,直接得出false。類似於短路了右邊。2、

shell" "(雙引號) ' '(單引號)的區別

" "(雙引號)與 ' '(單引號)的區別      你在shell prompt後面敲打鍵盤、直到按下enter的時候

邏輯和按位的區別

邏輯與或和按位與或的區別,按位與的符號和按位或的符號經過第一個條件就能判斷整個條件的真假,還要對第二個條件進行判斷,最後才2個結果結合起來判斷是真還是假。 邏輯與&& , 邏輯或 || 邏輯與&&表示的是交集,2個條件同時成立,結果才為真 邏輯或

邏輯電路原始碼

#邏輯電路原始碼 class LogicGate(object): def __init__(self,n): self.label=n self.output=None def getlabel(self):

如何在hive的shell使用hadoop shell 和linux的命令

1 使用linux 命令 hive> !pwd;  #前面加上一個!後面加上; 2 使用hadoop shell hive>fs -ls /  #省去前面的hadoop 後面加上; 3 hive -e  可以執行多條Hql ,中間使用;隔開    hive -S

閘電路邏輯符號大全(三態門,同門,異門,門,門, 傳輸門,全加器,半加器等)

最近要研究一下濾波器設計的無乘法器的實現,所以要學習一下加法器的電路,丟了一段時間,忘的差不多了,這裡羅列一下常用的閘電路的符號。 這是一個1位全加器的數位電路組成: 以下兩幅圖可以複習一下數位電路中的常用的元件。 

C語言通過邏輯運算()實現加法

1.加法器:首先看看下面的內容,瞭解一下什麼是加法器 本部分摘自:http://jpkc.nwpu.edu.cn/dzjc/diangongdz/wangluokecheng/dianzijishu/

Linux shell 引數變數&shell的雙引號

 引數變數:一些指令碼程式帶有引數,shell中用一些特殊的變量表示這些引數,這些特殊的變數就是引數變數。 Shell中引數變數 $1, $2,$3, ... 指令碼程式的引數 $* 在一個變數中列出所有

JavaSE7基礎 位運算 int類型變量進行 按位

網上 深入 ava demo new 與或非 反碼 技術分享 notepad jdk版本 :jdk-7u72-windows-i586系統 :Windows7編輯器 :Notepad++ v7.4.2註意事項 :博文內容僅供參考,不可用於其他用途。 代

位運算之 C

代碼 cout expr namespace 整數 建議 div 不同 har View Code 位運算比較易混: 位運算之 C 與或非異或 與運算:& 兩者都為1為1,否則為0 1&1=1, 1&0=0, 0&1=0, 0

Java開發筆記(十二)布林變數論道

在程式語言的設計之初,它們除了可以進行數學計算,還常常用於邏輯推理和條件判斷。為了實現邏輯判斷的功能,Java引入了一種布林型別boolean,用來表示“真”和“假”。該型別的變數只允許兩個取值,即true和false,其中true對應真值,而false對應假值。 如同數值變數擁有加減乘

Jquery屬性選擇器(同時匹配多個條件,)

<!DOCTYPE html> <html> <head> <title>Test multi selection</title> <script src="http://apps.bdimg.

正則表示式實現

我們先虛擬兩個表示式PatternA和PatternB,分別校驗條件A和條件B 一 匹配字元串同時滿足條件A和條件B (?=PatternA)PatternB 二 匹配字串滿足條件A,但不可滿足條件B (?!PatternB)PatternA 三 匹配字串或者滿

js--運算子 及 if判斷條件、隱式轉換 介紹

邏輯運算子:   返回值是Boolean型別,一般連線多個比較表示式;   與(&&):當所有表示式都返回true時,結果才為true,即是遇false則false;   或(||):當所有表示式都返回false時,結果才為false,即是遇true則true;     與

java 位運算子

int a = 3; 01 1 int b = 5; 10 1 /////////////////////////為了便於計算,a,b的最大值為 111,最小值為000,沒有涉及到符號運算(正負) a&b :"按位與",同時為1才為1,否則為0 a 0 1 1 b 1 0 1 ==