shell脚本内调用另外一个shell脚本的几种方法讲解

 更新时间:2023年06月26日 15:52:10   作者:fengbingchun  
在Linux开发中经常会编写shell脚本来执行一些任务,下面这篇文章主要给大家介绍了关于shell脚本内调用另外一个shell脚本的几种方法,需要的朋友可以参考下

有时会在一个shell脚本(如test_call_other_shell.sh)中调用另外一个shell脚本(如parameter_usage.sh),这里总结几种可行的方法,这些方法在linux上和windows上(通过Git Bash)均适用

1.通过source: 运行在相同的进程,在test_call_other_shell.sh中调用parameter_usage.sh后,parameter_usage.sh中的变量和函数在test_call_other_shell.sh中可直接使用

2.通过/bin/bash: 运行在不同的进程

3.通过sh: 运行在不同的进程

4.通过.: 运行在相同的进程,在test_call_other_shell.sh中调用parameter_usage.sh后,parameter_usage.sh中的变量和函数在test_call_other_shell.sh中可直接使用

parameter_usage.sh内容如下:

#! /bin/bash
# 参数的使用
# 我们可以在执行Shell脚本时,向脚本传递参数,脚本内获取参数的格式为:$n. n代表一个数字,1为执行脚本的第一个参数,2为执行脚本的第二个参数,以此类推
if [ $# != 3 ]; then
    echo "usage: $0 param1 param2 param3"
    echo "e.g: $0 1 2 3"
    exit 1
fi
echo "执行文件名: $0"
echo "param1: $1"; echo "param2: $2"; echo "param3: $3"
parameters=$*
# 特殊字符用来处理参数
# $#: 传递到脚本的参数个数
echo "参数个数为: $#"
# $*: 以一个单字符串显示所有向脚本传递的参数
echo "传递的参数作为一个字符串显示: $*"
# $@: 与$*相同,但是使用时加引号,并在引号中返回每个参数
echo "传递的参数作为字符串显示: $@"
for i in "$*"; do # 循环一次
    echo "loop"; echo $i
done
echo ""
for i in "$@"; do # 循环三次
    echo "loop"; echo $i
done
get_csdn_addr()
{
    echo "csdn addr: https://blog.csdn.net/fengbingchun/"
}

test_call_other_shell.sh内容如下

#! /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上的执行结果如下:

在windows上执行结果如下:

在linux下也可以将另外一个shell脚本所在的路径添加到$PATH环境变量,然后你就可以把它作为普通命令调用。

GitHub: https://github.com/fengbingchun/Linux_Code_Test

总结

到此这篇关于shell脚本内调用另外一个shell脚本的几种方法的文章就介绍到这了,更多相关shell脚本调用另外shell脚本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • jenkins 实现shell脚本化定时执行任务的方法

    jenkins 实现shell脚本化定时执行任务的方法

    这篇文章主要介绍了jenkins 实现shell脚本化定时执行任务,解决访问是jenkins构建好之后将jar远程推送到生产服务器,提前退出后台执行服务器远程脚本,脚本通过ngnx提前切走nginx代理auction sleep 1800s,半小时后执行更新重启,具体操作过程跟随小编一起看看吧
    2022-01-01
  • 监控服务器swap并重启php的Shell脚本

    监控服务器swap并重启php的Shell脚本

    有一台服务器老是交换扇区占满然后失去响应,很烦,因为加载了以前别人写的一个php扩展,效率低,资源占用大,悲剧的是现在还没有可以替换的东西
    2014-03-03
  • Linux的打包压缩与解压缩---tar、xz、zip、unzip命令详解

    Linux的打包压缩与解压缩---tar、xz、zip、unzip命令详解

    Linux 下一堆各式各样的压缩文件名:.gz、.tar.gz、tgz、bz2、.Z、.tar 等众多的压缩文件名,本文重点介绍Linux的打包压缩与解压缩---tar、xz、zip、unzip命令,感兴趣的朋友一起看看吧
    2024-02-02
  • Linux中搭建FTP服务器的方法

    Linux中搭建FTP服务器的方法

    这篇文章主要介绍了Linux中搭建FTP服务器的方法 的相关资料,需要的朋友可以参考下
    2015-09-09
  • Shell两种for循环对应实现方法解析

    Shell两种for循环对应实现方法解析

    这篇文章主要介绍了Shell两种for循环对应实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Linux Shell的一些使用小技巧收集

    Linux Shell的一些使用小技巧收集

    这篇文章主要介绍了Linux Shell的一些使用小技巧收集,本文收集了几十个小技巧,非常实用,需要的朋友可以参考下
    2014-12-12
  • 使用shell脚本分析网站日志统计PV、404、500等数据

    使用shell脚本分析网站日志统计PV、404、500等数据

    这篇文章主要介绍了使用shell脚本分析网站日志统计PV(浏览量)、404、500等数据,用一个脚本来实现,需要的朋友可以参考下
    2014-05-05
  • Linux磁盘管理之LVM详解及lvm磁盘操作命令

    Linux磁盘管理之LVM详解及lvm磁盘操作命令

    LVM,Logical Volume Manger,是linux内核提供的一种逻辑卷管理功能,由内核驱动和应用层工具组成,它是在硬盘的分区基础上,创建了一个逻辑层,可以非常灵活且非常方便的管理存储设备,这篇文章主要介绍了Linux磁盘管理之LVM详解及lvm磁盘操作命令,需要的朋友可以参考下
    2023-03-03
  • Linux中修改文件名的多种方法总结

    Linux中修改文件名的多种方法总结

    在Linux系统中,通过命令行界面可以方便地修改文件名,本篇博客将介绍几种常见的方法,包括mv命令、rename命令、find和mv命令的组合、sed命令以及使用bash脚本,这些方法可以根据实际需求进行选择,提供了灵活性和多样性,需要的朋友可以参考下
    2024-01-01
  • Shell管道和过滤器的使用

    Shell管道和过滤器的使用

    本文主要介绍了Shell管道和过滤器的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03

最新评论