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