- 隨著Shell腳本的廣泛應(yīng)用痹栖,它所使用的場合也變得多種多樣才睹,并且編寫腳本的代碼量也有所增加咆繁,有可能一個腳本的代碼量可能會達(dá)到上百行甚至更多,且多種功能會被整合在一個腳本中艾船,但是隨著企業(yè)功能拓展葵腹,代碼就會顯得擁擠、冗余屿岂,不易閱讀践宴,也不符合解耦規(guī)范。因此爷怀,對于每個不同的程序阻肩,編寫不同的腳本進(jìn)行控制管理就是運(yùn)維人員常用的方式了,即通過一個主腳本(父腳本)對所有其他功能性的腳本進(jìn)行統(tǒng)一調(diào)用运授,產(chǎn)生一個主節(jié)點(diǎn)多個功能節(jié)點(diǎn)烤惊,同時這就產(chǎn)生了嵌套腳本(子Shell腳本的一種)的概念。在主腳本中嵌套腳本的方式有很多吁朦,常見的為fork柒室、exec、source三種模式逗宜,下面舉例說明*
fork模式
調(diào)用fork 模式的子腳本有兩種方式:
/directory/script.sh ==>對腳本賦予執(zhí)行權(quán)限雄右,直接執(zhí)行腳本。
/bin/sh /directory/script.sh ==>在不賦予執(zhí)行權(quán)限時纺讲,利用執(zhí)行解釋器執(zhí)行腳本擂仍。
[root@test01 ~]# sh read.sh
here is fork command
we are the fork command next step!
[root@test01 ~]# cat read.sh
#!/bin/bash
/bin/sh /root/fork.sh
echo "we are the fork command next step!"
[root@test01 ~]#
exec 模式
調(diào)用exec 模式的腳本方式
exec /directory/script.sh # 具體路徑下的可執(zhí)行腳本
[root@test01 ~]# sh read.sh
we are the exec command function!
[root@test01 ~]# cat read.sh
#!/bin/bash
exec /root/exec.sh
echo "we are the exec command next step!" # <===注意 exec 后續(xù)腳本并沒有執(zhí)行 ,這里是與fork模式最大區(qū)別
[root@test01 ~]#
source模式
這個模式一般用于定義系統(tǒng)環(huán)境變量熬甚,例如修改用戶配置文件(.bash_profile) 或者系統(tǒng)配置文件(/etc/profile)完成后逢渔,刷新生效,當(dāng)然也可以用于日常腳本定義全局變量则涯,調(diào)用source模式方法有兩種:
source /directory/script.sh #<==使用source不容易被誤解复局,而“.”和“./”相近, 容易被誤解粟判。
. /directory/script.sh #<==“.”和source命令的功能是等價的。
[root@test01 ~]# cat read.sh
#!/bin/bash
source /root/source.sh
echo "we are the source command next step!"
echo $source
[root@test01 ~]# cat source.sh
#!/bin/bash
source=/etc/profile
echo "here is source command function!"
[root@test01 ~]#
[root@test01 ~]# sh read.sh
here is source command function!
we are the source command next step! # <====與exec 模式區(qū)別最大的地方 峦剔,后續(xù)腳本依然可以正常運(yùn)行
/etc/profile # <====與fork 模式區(qū)別最大的地方档礁,腳本定義的變量可以被shell 中引用