shell腳本內(nèi)調(diào)用另外一個(gè)shell腳本的幾種方法講解
有時(shí)會(huì)在一個(gè)shell腳本(如test_call_other_shell.sh)中調(diào)用另外一個(gè)shell腳本(如parameter_usage.sh),這里總結(jié)幾種可行的方法,這些方法在linux上和windows上(通過(guò)Git Bash)均適用:
1.通過(guò)source: 運(yùn)行在相同的進(jìn)程,在test_call_other_shell.sh中調(diào)用parameter_usage.sh后,parameter_usage.sh中的變量和函數(shù)在test_call_other_shell.sh中可直接使用
2.通過(guò)/bin/bash: 運(yùn)行在不同的進(jìn)程
3.通過(guò)sh: 運(yùn)行在不同的進(jìn)程
4.通過(guò).: 運(yùn)行在相同的進(jìn)程,在test_call_other_shell.sh中調(diào)用parameter_usage.sh后,parameter_usage.sh中的變量和函數(shù)在test_call_other_shell.sh中可直接使用
parameter_usage.sh內(nèi)容如下:
#! /bin/bash
# 參數(shù)的使用
# 我們可以在執(zhí)行Shell腳本時(shí),向腳本傳遞參數(shù),腳本內(nèi)獲取參數(shù)的格式為:$n. n代表一個(gè)數(shù)字,1為執(zhí)行腳本的第一個(gè)參數(shù),2為執(zhí)行腳本的第二個(gè)參數(shù),以此類(lèi)推
if [ $# != 3 ]; then
echo "usage: $0 param1 param2 param3"
echo "e.g: $0 1 2 3"
exit 1
fi
echo "執(zhí)行文件名: $0"
echo "param1: $1"; echo "param2: $2"; echo "param3: $3"
parameters=$*
# 特殊字符用來(lái)處理參數(shù)
# $#: 傳遞到腳本的參數(shù)個(gè)數(shù)
echo "參數(shù)個(gè)數(shù)為: $#"
# $*: 以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù)
echo "傳遞的參數(shù)作為一個(gè)字符串顯示: $*"
# $@: 與$*相同,但是使用時(shí)加引號(hào),并在引號(hào)中返回每個(gè)參數(shù)
echo "傳遞的參數(shù)作為字符串顯示: $@"
for i in "$*"; do # 循環(huán)一次
echo "loop"; echo $i
done
echo ""
for i in "$@"; do # 循環(huán)三次
echo "loop"; echo $i
done
get_csdn_addr()
{
echo "csdn addr: https://blog.csdn.net/fengbingchun/"
}test_call_other_shell.sh內(nèi)容如下:
#! /bin/bash
params=(source /bin/bash sh .)
usage()
{
echo "Error: $0 needs to have an input parameter"
echo "supported input parameters:"
for param in ${params[@]}; do
echo " $0 ${param}"
done
exit -1
}
if [ $# != 1 ]; then
usage
fi
flag=0
for param in ${params[@]}; do
if [ $1 == ${param} ]; then
flag=1
break
fi
done
if [ ${flag} == 0 ]; then
echo "Error: parameter \"$1\" is not supported"
usage
exit -1
fi
echo "==== test $1 ===="
$1 parameter_usage.sh 1 2 3
echo "parameters: ${parameters}"
get_csdn_addr
$1 parameter_usage 123
#ret=$?
#if [[ ${ret} != 0 ]]; then
# echo "##### Error: some of the above commands have gone wrong, please check: ${ret}"
# exit ${ret}
#fi
if [ $? -ne 0 ]; then
echo "##### Error: some of the above commands have gone wrong, please check"
exit -1
fi
echo "test finish"在linux上的執(zhí)行結(jié)果如下:

在windows上執(zhí)行結(jié)果如下:

在linux下也可以將另外一個(gè)shell腳本所在的路徑添加到$PATH環(huán)境變量,然后你就可以把它作為普通命令調(diào)用。
GitHub: https://github.com/fengbingchun/Linux_Code_Test
總結(jié)
到此這篇關(guān)于shell腳本內(nèi)調(diào)用另外一個(gè)shell腳本的幾種方法的文章就介紹到這了,更多相關(guān)shell腳本調(diào)用另外shell腳本內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SSH 遠(yuǎn)程執(zhí)行命令你要知道的二三事
SSH 是 Linux 下進(jìn)行遠(yuǎn)程連接的基本工具,但是如果僅僅用它來(lái)登錄那可是太浪費(fèi)啦!SSH 命令可是完成遠(yuǎn)程操作的神器啊,下面這篇文章主要給大家介紹了關(guān)于SSH 遠(yuǎn)程執(zhí)行命令的一些相關(guān)資料,需要的朋友可以參考下。2017-07-07
linux 驅(qū)動(dòng)之Kconfig文件和Makefile文件實(shí)例
這篇文章主要介紹了linux 驅(qū)動(dòng)之Kconfig文件和Makefile文件實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-01-01
使用Shell實(shí)現(xiàn)ini文件的讀寫(xiě)
這篇文章主要為大家詳細(xì)介紹了如何使用Shell實(shí)現(xiàn)ini文件的讀寫(xiě),文中的示例代碼簡(jiǎn)潔易懂,具有一定的借鑒價(jià)值,有需要的小伙伴可以參考一下2024-11-11
Linux Bash 提示符的一些騷操作(自定義 Bash 提示符)
這篇文章主要介紹了Linux Bash 提示符的一些騷操作,一些能讓你自定義 Bash 提示符的黑科技,需要的朋友可以參考下2017-07-07
通過(guò)實(shí)例深入理解linux shell數(shù)組
本文為大家介紹linxu shell中數(shù)組的相關(guān)知識(shí),并舉了很多例子供參考,包括數(shù)組的復(fù)制,計(jì)算,刪除,替換等,是學(xué)習(xí)shell 數(shù)組的不可多得的好文章2013-02-02
bash?shell?自定義函數(shù)命令持久化生效問(wèn)題
這篇文章主要介紹了bash?shell?自定義函數(shù)命令持久化生效,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Linux中使用expect腳本實(shí)現(xiàn)遠(yuǎn)程機(jī)器自動(dòng)登錄
本篇文章給大家介紹在Linux中使用expect腳本實(shí)現(xiàn)遠(yuǎn)程機(jī)器自動(dòng)登錄,前提是要?jiǎng)?chuàng)建一個(gè)expec腳本ssh_expect,接下來(lái)定義一些命令別名等,下面跟著腳本之家小編一起學(xué)習(xí)學(xué)習(xí)吧2015-09-09

