这里介绍参数传递的两种方式。

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

采用$0,$1,$2..等方式获取脚本命令行传入的参数

$0:脚本名称

$1....: 参数

例子:

#编写一个shell
$ vim test.sh echo "参数0参数为:"$0
echo "参数1参数为:"$1
echo "参数2参数为:"$2 #执行shell传递两个参数
$ bash test.sh 我是参数1 我是参数2 参数0参数为:test.sh
参数1参数为:我是参数1
参数2参数为:我是参数2

方式二:getopts

getopts引用的三个环境变量:

  OPTARG: 上一个由getopts内置命令处理的选项参数的值, option argument(存放选项参数),当选项需要选项参数时,getopts 命令就将其置于变量 OPTARG 中

  OPTIND:  下一个由getopts内置命令处理的参数的序号,option index,每次调用脚本它都会被初始值为1,会逐次递增。

  OPTERR: 如果设为1,bash会显示getopts的错误。设为0,不显示getopts的错误。

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

A、前面没有冒号:

会按照系统的定义报错

a. 指定了非法选项,即不存在的选项,会报错:scriptname: illegal option — p

b. 选项需要参数但没有指定,会报错:scriptname: : option requires an argument –

c. 不论是指定了错误的选项或者指定了带选项的参数没有指定参数,variable都设置为”?”,对应的OPTARG为出错的选项

B、选项前面有冒号,可以屏蔽这些错误信息,使用自己的反馈信息

a. 当指定的参数不存在时,variable设置为”:”,对应的$OPTARG为”对应的选项”

b. 指定的选项是带参数的而没有提供参数,variable设置为”?”,对应的$OPTARG为”这时候的选项”

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中执行脚本,结果如下

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

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

【Linux】shell脚本参数传递的更多相关文章

  1. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  2. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  3. Linux shell脚本编程(三)

    Linux shell脚本编程 流程控制: 循环语句:for,while,until while循环: while CONDITION; do 循环体 done 进入条件:当CONDITION为“真” ...

  4. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  5. Linux Shell 脚本入门

    linux shell 脚本格式 #!/bin/sh#..... (注释)命令...命令... 使用vi 创建完成之后需设置权限 chmod +x filename.sh 执行命令: ./filena ...

  6. Linux Shell脚本入门--cut命令

    Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...

  7. Linux Shell脚本攻略 读书笔记

    Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...

  8. 阿里Linux Shell脚本面试25个经典问答

    转载: 阿里Linux Shell脚本面试25个经典问答 Q:1 Shell脚本是什么.它是必需的吗? 答:一个Shell脚本是一个文本文件,包含一个或多个命令.作为系统管理员,我们经常需要使用多个命 ...

  9. Linux Shell脚本教程

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  10. Linux shell 脚本攻略之统计文件的行数、单词数和字符数

    摘自:<Linux shell 脚本攻略>

随机推荐

  1. [转]Jenkins HTML报告样式无法显示问题解决

    原文地址: https://vwin.github.io/2018/10/11/Jenkins-HTML%E6%8A%A5%E5%91%8A%E6%A0%B7%E5%BC%8F%E6%97%A0%E6 ...

  2. layer帮助手册

    layer帮助手册 键:值    调用时按需重新分配,可实现各种风格,如:$.layer({键:值,键:值,......}) 描述 type:0 层的类型.0:信息框(默认),1:页面层,2:ifra ...

  3. OSPF协议——原理及实验

    首先命令部分: ospf 1 进入ospf协议 area 0 划定自治区域 因为实验只用了1个区域所以参数就为0 也就是骨干区域 network +网段+反写掩码(0.0.0.255)指定运行OSPF ...

  4. 安装loadrunner11的时候提示'命令行选项语法错误。键入命令 / ?’ 怎么办

    重启电脑后再安装.若还是不行就运行安装程序自带的vcredist_x86.exe,在我电脑的安装包的目录是loadrunner-11\lrunner\Kor\prerequisites\vc2005_ ...

  5. js 为false的几种情况

    1: false 2: null 3:undefined 4:"" 空字符串 5:0 6:NaN 如果你的if条件里面会出现 0 或者"",那么这种肯定是为假的 ...

  6. 【五一qbxt】day7-2 选择客栈

    停更20天祭qwq(因为去准备推荐生考试了一直在自习qwq) [noip2011选择客栈] 这道题的前置知识是DP,可以参考=>[五一qbxt]day3 动态规划 鬼知道我写的是什么emm 这道 ...

  7. Day7-----Python的序列类(有子类:元组类,列表类)

    序列类型 1.基本介绍: 序列类型是一种基类类型  ,既然被称为那就肯定是有道理的,关于序列 它有  正向  和  反向  两种序号,正向序号从零开始,反向序号从负一开始 a = '例如这个字符串' ...

  8. 【JMeter5.0】Mac安装JDK和JMeter5

    之前讲了Windows下安装JDK和JMeter4.0的方法,其实不论操作系统是Windows.Mac OS.Linux等,JMeter所需要的基础环境配置都是类似的,本文介绍JMeter for M ...

  9. Mint-Linux【最佳】【快速】安装微信、企业微信、TIM、QQ等软件

    废话不多说 直接上教程 注意看 方式一.在线安装 在本地目录下.如 /home/root/Document 直接使用在线安装脚本,安装最新的Release版本: wget -qO- https://r ...

  10. NGUI的sprite的使用(九宫切图)

    一,图集的添加和背景图的选择 图集的选择Atlas和背景图的选择Sprite 二,type的sliced切背景图的使用 当选择Sprite后的edit时,我们就可以设置当前背景图的边距,也有切图的意思 ...