編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set -e選項。
在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令碼執行出現意料之外的情況時,立即退出,避免錯誤被忽略,導致最終結果不正確。這裡主要討論的是set -e 選項的作用範圍,建立如下測試檔案:
zhenglei@szexdroid14:~/study/scripts$ cat run.sh
#!/bin/bash
set -e
test_dir/set.sh
zhenglei@szexdroid14:~/study/scripts$ cat test_dir/set.sh
#!/bin/bash
set -e
function
return1
()function
return0
()function
returnf
()echo
「run start」
return1
if [ $? -ne 0 ];then
echo
「cmd error」
fiecho
「run end !」
單獨執行test_dir/set.sh時列印如下:
zhenglei@szexdroid14:~/study/scripts$ ./test_dir/set.sh
run start
即return1語句返回非零,立即退出執行。說明set -e 選項有效。接著將test_dir/set.sh中的set -e 遮蔽掉再執行run.sh時:
zhenglei@szexdroid14:~/study/scripts$ ./run.sh
run start
cmd error
run end !
列印和程式流程相符。說明run.sh中set -e選項在set.sh中不起作用。看似此選項的只作用於當前指令碼,不作用於其所呼叫的指令碼。如此?
將run.sh指令碼修改如下,並執行:
zhenglei@szexdroid14:~/study/scripts$ cat run.sh
#!/bin/bash
set -e
. test_dir/set.sh
zhenglei@szexdroid14:~/study/scripts$ ./run.sh
run start
說明set -e 選項對set.sh起作用。指令碼作為乙個程序去描述set -e選項的範圍應該是:set -e選項只作用於當前進行,不作用於其建立的子程序。
set -e 命令用法總結如下:
1. 當命令的返回值為非零狀態時,則立即退出指令碼的執行。
2. 作用範圍只限於指令碼執行的當前進行,不作用於其建立的子程序。
3. 另外,當想根據命令執行的返回值,輸出對應的log時,最好不要採用set -e選項,而是通過配合exit 命令來達到輸出log並退出執行的目的。
shell指令碼中set e作用
最近學習shell指令碼想到乙個問題,如果指令碼 現了一條異常語句,甚至可以影響整個指令碼的使用,那麼是否有一旦出現問題就可以及時停止的方法呢?在shell指令碼中set命令就可以輕鬆實現。set命令的 e引數,linux系統自帶的說明是 exit immediately if a command ...
Unix Linux指令碼中 set e 的作用
有些指令碼中會看到這樣的語句 html view plain copy print?bin bash set e command 1 command 2 exit 0 bin bash set e command 1 command 2 exit 0 set e 這句語句告訴bash如果任何語句的執...
Unix Linux指令碼中 set e 的作用
編寫shell指令碼沒多久,對於其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用指令碼去實現。其中就有用到set e選項。在用這個命令之前,也查過其功能,描述比較簡單 就是當命令以非零狀態退出時,則退出shell。主要作用是,當指令碼執行出現意料之外的情況時,立即退出,避免錯誤被忽略,導致最...