shell腳本中set?-e選項作用范圍小結(jié)
編寫shell腳本沒多久,對于其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用腳本去實現(xiàn)。其中就有用到set -e選項。
在用這個命令之前,也查過其功能,描述比較簡單:就是當命令以非零狀態(tài)退出時,則退出shell。主要作用是,當腳本執(zhí)行出現(xiàn)意料之外的情況時,立即退出,避免錯誤被忽略,導致最終結(jié)果不正確。這里主要討論的是set -e 選項的作用范圍,創(chuàng)建如下測試文件:
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()
{
? ? ? ? return 1
}
function return0()
{
? ? ? ? return 0
}
function returnf()
{
? ? ? ? return $1
}
echo "run start"
return1
if [ $? -ne 0 ];then
? ? ? ? echo "cmd error"
fi
echo "run end !"單獨執(zhí)行test_dir/set.sh時打印如下:
zhenglei@SzExdroid14:~/study/scripts$ ./test_dir/set.sh run start
即return1語句返回非零,立即退出執(zhí)行。說明set -e 選項有效。接著將test_dir/set.sh中的set -e 屏蔽掉再執(zhí)行run.sh時:
zhenglei@SzExdroid14:~/study/scripts$ ./run.sh run start cmd error run end !
打印和程序流程相符。說明run.sh中set -e選項在set.sh中不起作用。看似此選項的只作用于當前腳本,不作用于其所調(diào)用的腳本。如此?
將run.sh腳本修改如下,并執(zhí)行:
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選項的范圍應(yīng)該是:set -e選項只作用于當前進行,不作用于其創(chuàng)建的子進程。
set -e 命令用法總結(jié)如下:
1. 當命令的返回值為非零狀態(tài)時,則立即退出腳本的執(zhí)行。
2. 作用范圍只限于腳本執(zhí)行的當前進行,不作用于其創(chuàng)建的子進程。
3. 另外,當想根據(jù)命令執(zhí)行的返回值,輸出對應(yīng)的log時,最好不要采用set -e選項,而是通過配合exit 命令來達到輸出log并退出執(zhí)行的目的。
注:編譯此文檔時,出現(xiàn)行間距不一致的情況 ,編輯器也沒找到可調(diào)整的菜單。結(jié)果發(fā)現(xiàn)shift + enter / delete 鍵可以比較方便的控制。
到此這篇關(guān)于shell腳本中set -e選項作用范圍小結(jié)的文章就介紹到這了,更多相關(guān)shell set -e作用范圍內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
檢測網(wǎng)站down掉后自動發(fā)信的shell腳本代碼
腳本用途:檢測指定文件中的網(wǎng)站url,當一個網(wǎng)站down掉后,自動給指定的郵箱發(fā)信2013-02-02
詳解Linux中atime,mtime,ctime的使用場景
這篇文章主要介紹了Linux的三個時間atime,mtime,ctime詳細說明與使用場景,文中的示例代碼簡潔易懂,感興趣的小伙伴可以跟隨小編一起了解一下2022-10-10

