之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。

bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。

1、命令行参数

向shell脚本传递数据的最基本方式是使用命令行参数。

1)读取参数

读取输入的参数的变量为位置参数,位置参数通过标准数字表示,

其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。

shell脚本自动将命令行参数赋值给各个位置变量。

同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)

当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。

2)读取程序名称

传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。

使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。

3)测试脚本

当脚本认为应该包含参数,却实际上没有数据时,就会出错。

好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。

例子:if [ –n “$1” ] then .. else .. fi

2、特殊的参数变量

用于跟踪命令行参数

1)参数计数

使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#

例子:if [ $# –ne 2 ] 即可测试参数个数

可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)

2)获取所有数据

变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。

变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数

3、移位

shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)

在不清楚参数数目情况下,这是一个迭代参数的好办法。

可以为shift提供一个参数,来实现多位移变化。

4、处理选项

选项是由破折号引导的单个字母,用于更改命令的行为。

1,找出选项

1)处理简单选项

可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。

2)从参数中分离选项

同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。

3)处理带值的选项

选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:

2,使用getopt命令

getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析

1)命令格式

getopt可以接受任意形式的选项和参数列表,并自动将它们转换为适当的格式。

命令格式为: getopt options optstring parameters

选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。

2)脚本中使用getopt

需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。

需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`

但是getopt命令不能很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:

3)更高级的getopts命令

getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。

非常适宜于在循环中解析所有命令行参数

格式为: getopts optstring variable

$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。

注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。

好的特性:

1)可以在参数值中包含空格

2)选项字母和参数值中间可以没有空格

3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号

5、标准化选项

有一些字母选项具有标准含义。最好按照标准含义定义选项意义

-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y

6、获取用户输入

当需要在执行过程中获得执行脚本人员的输入,使用read命令

1)基本读取

read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。

-p 允许在read命令行中直接指定一个提示。

可以指定多个变量,也可以不指定将放置在reply环境变量中)

2)计时

使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。

使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入

3)默读

使用-s使输入不显示在终端例如输入密码)

4)读取文件

最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

例子:

复制代码 代码示例:

cat test | while read line

linux的shell命令行参数,shell脚本命令行参数简介相关推荐

  1. 【Groovy】Groovy 脚本调用 ( 命令行执行 Groovy 脚本并传入参数 | 获取 Groovy 脚本执行参数 )

    文章目录 前言 一. 命令行执行 Groovy 脚本并传入参数 二.获取 Groovy 脚本执行参数 前言 在 Groovy 脚本 , Groovy 类 , Java 类中 , 可以调用 Groovy ...

  2. 命令行运行Python脚本时传入参数的三种方式

    三种常用的方式 如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script ...

  3. python 参数_python脚本命令行参数解析

    前言 在python命令行参数的解析模块中,我们常用的就是sys内置模块,但该模块的功能过于原始单一,很多具体的逻辑功能还得靠我们自己手动实现,实在较为麻烦.在这里向大家推荐一个好用的参数解析的模块a ...

  4. 命令行运行vbs脚本并传参数给vbs中的变量简单示例

    详细了解脚本请参考:脚本学习及应用分享 - 批处理和脚本的交互 简单代码示例: CommandLine:    path\cscript.exe  xxx.vbs helloworld VBSCode ...

  5. bat批量剪切命令_1.5.1bat脚本命令MOVE 移动 剪切粘贴

    批处理(Batch),也称为批处理脚本.它应用于DOS和Windows系统中.批处理文件的扩展名为bat . BAT不是百度 阿里 腾讯.是batch. 简单的bat命令MD.PAUSE.DIR.EC ...

  6. 04-Linux之Linux软件安装、三剑客和Shell编程

    1.9 Linux的软件安装 1.9.1 环境变量的配置 环境变量是指 当我们配置了环境变量后, 执行相应的命令,告诉系统命令搜索的文件夹,当我们执行一个命令的时候,默认从当前路径开始查找,如果当前路 ...

  7. 【UEFI/BIOS】UEFI Shell Command (UEFI Shell 命令)篇目一

    Shell 命令: 命令 作用 alias 在UEFI Shell环境中显示.创建.删除别名 attrib 显示或更改文件或目录的属性 bcfg 操作Boot或者驱动程序顺序 cd 显示或更改当前目录 ...

  8. 15条常用的视频音频编辑脚本命令(mencoder/ffmpeg等)

    可以把它当快速简易参考看,主要的功能有: 视频格式转换 音频格式转换 切割视频及音频 连接两段视频 视频音频同步 将图像系列转换成视频 这里是百鬼丸以前收集的一部分命令行视频音频编辑脚本命令,一直在自 ...

  9. 【bat批处理脚本命令】bat脚本命令的基本使用(保姆级图文+实现代码)

    目录 1.bat脚本命令的注释 2.bat脚本命令的换行 3.bat脚本命令的if判断 总结 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 欢迎关注 『bat批处理脚本命令』 系列,持续更新中 ...

  10. linux shell运行脚本命令行参数,shell脚本命令行参数简介

    之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互. bash shell提供了命令行参数添加在命令后面的数据值).命令行选项修改命令行为的单字符值)和直接读取键盘输入. 1.命 ...

最新文章

  1. HDU 3826 Squarefree number:题目解答源码
  2. stm32 窗口看门狗学习(一)
  3. SAP 电商云 Spartacus UI 客户端模式下从服务器端渲染模式接收到的状态转移
  4. 回顾微软近年来对于Linux和开源的策略
  5. vue 使用 el-image图片无法显示
  6. php多条件筛选顺序_php多条件组合筛选
  7. 在Eclipse中使用Git
  8. fdisk 分区_【linux】循序渐进学运维-基础篇-分区命令fdisk
  9. 生成树协议(STP)原理与配置PVST+实现负载均衡
  10. Ansible 安装
  11. 苹果手机黑屏了怎么办_来电话手机黑屏怎么办
  12. VMware vSphere 5.x 与 vSphere 6.0各版本功能特性对比
  13. 计算机论文格式要求吗,论文格式
  14. IOS免签网站封装工具PJ版
  15. 【热门主题】蓝色妖姬电脑桌面主题
  16. 关于2022虎符pwn mva解决jmp rax无法反汇编的这么个事情
  17. 生成Xcode中各个尺寸的Mac App Icon
  18. 最新Android框架排行榜。
  19. 你还在为校园内丢失东西无处可寻而发愁吗?速戳进来
  20. 如何让机器理解汉字一笔一画的奥秘?

热门文章

  1. 如何成为一名优秀的工程师(华为内部培训资料)
  2. 中国艺术《空无一物》孙溟㠭篆刻作品
  3. OSChina 周一乱弹 ——家财万贯有尽时,跪求大法无绝期
  4. R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutation tests)、在同一数据集上使用单向协方差分析(one-way ANCOVA)、使用aovp函数的置换检验单向协方差
  5. vue-draggable-resizable
  6. BGP选路原则和选路控制
  7. 灵能传输(贪心,前缀和)
  8. 【论文简述及翻译】A ConvNet for the 2020s(CVPR 2022)
  9. 宝宝也能看懂的 leetcode 周赛 - 174 - 3
  10. Arthas的watch命令