剛剛學會了乙個很實用的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...