方式一:$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的方式进行参数传递

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

sh执行文件 参数传递_详解shell中脚本参数传递的两种方式相关推荐

  1. python解释器在哪里_详解查看Python解释器路径的两种方式

    进入python的安装目录, 查看python解释器 进入bin目录 # ls python(看一下是否有python解释器版本) # pwd (查看当前目录) 复制当前目录即可 1. 通过脚本查看 ...

  2. python表单提交的两种方式_详解flask表单提交的两种方式

    一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html ... data Submit &nbsp 将操作绑定 $(document).ready(function() ...

  3. python中list[1啥意思_详解Python中list[::-1]的几种用法

    本文主要介绍了Python中list[::-1]的几种用法,分享给大家,具体如下: s = "abcde" list的[]中有三个参数,用冒号分割 list[param1:para ...

  4. linux打开文件命令_详解Linux中3个文件查找相关命令

    来自:民工哥技术之路 1.which命令 我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索: which  查看可执行文件的位置. whereis 查看文件的位置. ...

  5. mysql mybatis模糊查询语句_详解MyBatis模糊查询LIKE的三种方式

    模糊查询也是数据库SQL中使用频率很高的SQL语句,使用MyBatis来进行更加灵活的模糊查询. 直接传参法 直接传参法,就是将要查询的关键字keyword,在代码中拼接好要查询的格式,如%keywo ...

  6. json解析详解 java_Java解析Json数据的两种方式详解

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  7. 【JNU】网络配置大题详解(E口与G口两种类型)

    [JNU]网络配置大题详解(E口与G口两种类型) E口与G口的不同之处 E口的SW1配置 G口的SW1配置 RT1配置 RT2配置 RT3配置 E口运行结果 G口运行结果 E口与G口的不同之处 如果你 ...

  8. python3 yield 大文件_详解Python3中yield生成器的用法

    任何使用yield的函数都称之为生成器,如: def count(n): while n > 0: yield n #生成值:n n -= 1 另外一种说法:生成器就是一个返回迭代器的函数,与普 ...

  9. python操作目录_详解python中的文件与目录操作

    详解python中的文件与目录操作 一 获得当前路径 1.代码1 >>>import os >>>print('Current directory is ',os. ...

最新文章

  1. 学习lulu之——tips 提示
  2. ISA2006英文版实验手册下载
  3. java私塾 设计模式 视频_[章节]Java Web开发理论部分视频教程 之 04 mvc设计模式详解视频教程 - 我的学习中心 - 私塾在线 - 只做精品视频课程服务...
  4. python怎么画多重饼状图_Python通过matplotlib画双层饼图及环形图简单示例
  5. 数字图像处理:附录-程序实例、参考文献、标准图片集合
  6. Java “Resource leak: ‘scanner‘ is never closed“警告的解决办法
  7. python自动发送微信-Python自动定时发送微信消息
  8. spark中saveAsTextFile如何最终生成一个文件
  9. DetoursHook
  10. L1-033 出生年 (15 分)—团体程序设计天梯赛
  11. 神州数码c语言笔试题,神州数码应聘笔试题(2)
  12. EEGLAB及其插件下载安装
  13. 怎么用计算机按反三角函数图像及性质,反三角函数图像及性质
  14. lmi克罗内克积 matlab_行正交矩阵的分层克罗内克积扩大法
  15. origin8.0快速实现多X,Y绘制
  16. 2022香港ib成绩公布,实在是太高了
  17. mac使用mysql出现的错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  18. 计算机游戏的作文,玩电脑游戏作文400字
  19. 服务网格——服务网格架构(概念原理2)
  20. 走过14个双11,淘宝天猫迎来价值重估

热门文章

  1. java爬虫抓取nba_python爬取nba今天的信息
  2. 【计算机网络】物理层 : 传输介质 ( 导向性传输介质 | 双绞线 | 同轴电缆 | 光纤 | 非导向性传输介质 | 无线电波 | 微波 | 红外线 、激光 )
  3. Ubuntu18.04-安装安装glog
  4. 爆肝总结30道计网常考面试题
  5. LSTM-实现写诗机器人
  6. C语言memcpy函数和memmove函数
  7. D3.js中Bullet Charts详解
  8. squeezenet论文详解
  9. libcurl 错误码
  10. 为什么要内存对齐 Data alignment: Straighten up and fly right