shell腳本中set?-e選項(xiàng)作用范圍小結(jié)
編寫shell腳本沒多久,對(duì)于其許多命令的具體用法還不太熟悉。最近剛好有需求,就嘗試用腳本去實(shí)現(xiàn)。其中就有用到set -e選項(xiàng)。
在用這個(gè)命令之前,也查過其功能,描述比較簡(jiǎn)單:就是當(dāng)命令以非零狀態(tài)退出時(shí),則退出shell。主要作用是,當(dāng)腳本執(zhí)行出現(xiàn)意料之外的情況時(shí),立即退出,避免錯(cuò)誤被忽略,導(dǎo)致最終結(jié)果不正確。這里主要討論的是set -e 選項(xiàng)的作用范圍,創(chuàng)建如下測(cè)試文件:
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)對(duì)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í)行的返回值,輸出對(duì)應(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 6.3下給PHP添加mssql擴(kuò)展模塊教程
這篇文章主要介紹了CentOS 6.3下給PHP添加mssql擴(kuò)展模塊教程,本文使用freetds編譯安裝實(shí)現(xiàn),需要的朋友可以參考下2014-09-09使用shell腳本實(shí)現(xiàn)ping對(duì)應(yīng)IP所對(duì)應(yīng)的人名(推薦)
這篇文章主要介紹了使用shell腳本實(shí)現(xiàn)ping對(duì)應(yīng)IP所對(duì)應(yīng)的人名的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11Linux shell實(shí)現(xiàn)HTTP服務(wù)示例代碼
這篇文章介紹的是如何實(shí)現(xiàn)一個(gè)可以調(diào)用shell腳本的HTTP服務(wù),本文給出了詳細(xì)的示例代碼,有需要的可以參考借鑒。2016-08-08修改Apache配置指定php配置文件php.ini的位置方法
下面小編就為大家?guī)硪黄薷腁pache配置指定php配置文件php.ini的位置方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02linux下安裝配置Memcache和PHP環(huán)境的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猯inux下安裝配置Memcache和PHP環(huán)境的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02