shell指令碼中 set ex

2021-10-13 08:41:38 字數 1434 閱讀 2136

剛剛學會了乙個很實用的shell命令set -ex,在這裡分享一下。

set -e

先說說set -e,這個引數的含義是,當命令發生錯誤的時候,停止指令碼的執行。

通常來說,我們會習慣於使用&&來實現這樣的功能,比如:

echo 1 && rm non-existent-file && echo 2
但是,寫成一行呢,可讀性有點差,分成多行的話,也得注意換行符和&&號,我就有過好幾次忘了加這倆東西,還是挺麻煩的是吧。

更麻煩的是,&&連線的命令之間不能寫注釋,也就是說,下面這個示例是不能用的:

echo 1 

&& rm non-existent-file

&& echo 2

執行之後會是這個德行:

rm: non-existent-file: no such file or directory

rm: #: no such file or directory

rm: which: no such file or directory

rm: will: no such file or directory

rm: fail: no such file or directory

./test1.sh: line 5: syntax error near unexpected token `&&'

./test1.sh: line 5: ` && echo 2'

現在,就可以寫成下面這樣了:

#!/bin/bash

set -e

echo 1

rm non-existent-file

echo 2

猜猜最後輸出裡面會不會把2列印出來?

set -x

說完了-e,繼續說說-x。-x引數的作用,是把將要執行的命令用乙個+標記之後顯示出來。

還是拿上面這個指令碼舉個例子,這次加上-x:

#!/bin/bash

set -ex

echo 1

rm non-existent-file

echo 2

然後它的輸出就變成了:

+ echo 1

+ rm non-existent-file

rm: non-existent-file: no such file or directory

注意第一行和第三行前面那個+,這就是-x引數的作用。

寫在最後!!!

需要注意,這條命令需要放到整個shell指令碼的開頭,才會起作用。畢竟稍微想想就知道,這是倆開關,不論放在中間還是結尾,都不會起到預期的作用。

shell中基礎指令碼

shell 指令碼 shell script 是一種為 shell 編寫的指令碼程式。業界所說的 shell 通常都是指 shell 指令碼,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。由於習慣的原因,簡潔起見,本文出現的 shell程式設計 都是指 shell 指...

shell指令碼中 2 1

在指令碼開發中經常能看到 2 1 比如 2 root cd x php index.php task testone dev null 2 1對於 1 更準確的說應該是檔案描述符 1,而1標識標準輸出,stdout。對於2 表示標準錯誤,stderr。2 1 的意思就是將標準錯誤重定向到標準輸出。這...

shell指令碼中呼叫其他指令碼

目前來說有三種方法 1.指令碼絕對路徑 這個方式是最普通的,底層呼叫的是fork實現,執行的時候開乙個子shell執行呼叫的指令碼,子shell執行的時候,父shell還在 子shell執行完畢後返回父shell,子shell從父shell繼承環境變數,但是子shell中的環境變數不會帶回父shel...