详解shell中脚本参数传递的两种方式

 更新时间:2021年03月21日 10:09:04   作者:随风丶逆风  
这篇文章主要介绍了详解shell中脚本参数传递的两种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

方式一:$0,$1,$2..

采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}....才能获取到参数,但是一般很少会超过10个参数的情况。

1.1 示例:新建一个test.sh的文件

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

在shell中执行脚本,结果如下

$ ./test.sh 1 2

#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2

1.2 下面是参数超过10个的情况,在test.sh文件写入

#!/bin/bash
echo "脚本名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
……
echo "第十个参数$10"
echo "第十个参数${10}"

在shell中执行脚本,结果如下

$ ./test.sh a b c d e f g h i j

#shell中将会输出:
脚本名./test.sh
第一个参数a
第二个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第八个参数h
第九个参数i
第十个参数a0
第十个参数j

可以看到${10}正确读取到了第十个参数,而$10被分成$1读取到第一个参数a然后拼接字符串0,于是输出a0。

优点:获取参数更容易,执行脚本时需要的输入少

缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误

方式二:getopts

语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
 option:表示为某个脚本可以使用的选项
":":如果某个选项(option)后面出现了冒号(":"),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中

2.1 示例:同样新建一个test.sh文件

while getopts ":a:b:c:" opt
do
 case $opt in
  a)
  echo "参数a的值$OPTARG"
  ;;
  b)
  echo "参数b的值$OPTARG"
  ;;
  c)
  echo "参数c的值$OPTARG"
  ;;
  ?)
  echo "未知参数"
  exit 1;;
 esac
done

用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。

在shell中执行脚本,结果如下

$ ./test.sh -a 1 -b 2 -c 3

#在shell中的输出
参数a的值1
参数b的值2
参数c的值3

$ ./test.sh -a 1 -c 3

#在shell中的输出
参数a的值1
参数c的值3

$ ./test.sh -a 1 -c 3 -d 4

#在shell中的输出
参数a的值1
参数c的值3
未知参数

优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植

缺点:脚本执行时参数需要的输入会增多

总结:推荐使用getopts的方式进行参数传递

方式三:声明变量 直接引用

先在test1.sh脚本中声明变量AA BB CC DD

AA=11
BB=22
CC=33
DD=44

在test2.sh脚本中引用变量AA BB CC并打印

echo $AA $BB $CC $AA

注意:执行脚本的时候使用(. 脚本名)可以引用脚本外声明的变量,使用(sh 脚本名)不能引用局部之外的变量

到此这篇关于详解shell中脚本参数传递的两种方式的文章就介绍到这了,更多相关shell脚本参数传递内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用shell脚本对Nginx日志进行切分的示例代码

    使用shell脚本对Nginx日志进行切分的示例代码

    本篇文章主要介绍了使用shell脚本对Nginx日志进行切分的示例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-08-08
  • shell编程中的字符串截取方法小结

    shell编程中的字符串截取方法小结

    这篇文章主要介绍了shell编程中的字符串截取方法小结,本文讲解了截取字符变量的前8位的方法、按指定的字符串截取方法、按照指定要求分割方法等内容,需要的朋友可以参考下
    2015-03-03
  • linux定时任务基础命令介绍(14)

    linux定时任务基础命令介绍(14)

    这篇文章主要为大家详细介绍了linux定时任务基础命令,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Linux系统中运行.sh文件的几种方法

    Linux系统中运行.sh文件的几种方法

    这篇文章主要给大家介绍了Linux系统中运行.sh文件的几种方法,文中通过图文结合的方式介绍的非常详细,对大家学习或者使用Linux具有一定的参考学习价值,需要的朋友可以参考下
    2024-12-12
  • Linux shell编程中IO和条件及循环处理的细节问题讨论

    Linux shell编程中IO和条件及循环处理的细节问题讨论

    这篇文章主要介绍了Linux shell编程中IO和条件及循环处理的细节问题讨论,需要的朋友可以参考下
    2016-02-02
  • Linux touch命令使用示例

    Linux touch命令使用示例

    我们平时用得最多的是通过touch创建一个空文件,实际上通过touch命令可以修改文件的atime、mtime,所以文件的真实访问时间和修改时间是可以被修改,我们在排查系统异常的时候还需要结合日志、历史命令等等因素综合决策,本文介绍Linux touch命令,需要的朋友可以参考下
    2023-03-03
  • shell进度条追踪指令执行时间的场景分析

    shell进度条追踪指令执行时间的场景分析

    这篇文章主要介绍了shell进度条如何追踪指令执行时间,本文中的进度条可以应用于大部分场景。不用修改进度条函数的任何代码,就可以直接使用,特别适合那些可预估指令执行时间的场景,需要的朋友可以参考下
    2022-06-06
  • Linux上的文件搜索命令实例详解

    Linux上的文件搜索命令实例详解

    这篇文章主要介绍了Linux上的文件搜索命令实例详解,需要的朋友可以参考下
    2017-10-10
  • linux shell将变量拼接到命令中

    linux shell将变量拼接到命令中

    本文主要介绍了linux shell将变量拼接到命令中,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Shell脚本echo指令使用小技巧

    Shell脚本echo指令使用小技巧

    这篇文章主要介绍了Shell脚本echo指令使用小技巧,包括使用echo指令输出换行、输出不换行、输出变量等技巧,需要的朋友可以参考下
    2014-07-07

最新评论