shell 指令碼中set e選項作用範圍

2021-09-11 08:26:07 字數 1644 閱讀 6680

編寫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。主要作用是,當指令碼執行出現意料之外的情況時,立即退出,避免錯誤被忽略,導致最...