1. Linux下可执行程序的Shell传参格式规范

Linux下的可执行程序在运行时经常需要传一些参数,而这些参数是有规范的。包括我们自己写的在Linux系统下运行的Shell脚本、Python脚本等可执行程序,最好也遵循相关规范。我们下面以Linux命令为例来讲解参数规范:

Linux命令行的格式规范如下:

orion-orion@MyDesktop ~ % command [-options] parameter1 parameter2

上述命令详细说明如下:

  1. 一行命令中第一个输入的部分绝对是命令(command)或可执行文件(例如Shell脚本)。
  2. 中括号[]并不存在于实际的命令中,表示该参数是可选的,而加入选项设置时,通常选项前会带-符号,例如-h;如果要使用选项的完整全名,选项前会带--符号,例如--help
  3. parameter1parameters2可以为依附在选项后面的参数,也可以为command的参数。
  4. 命令、选项、参数之间以空格来区分,无论空几格Shell都视为一格,所以空格是很重要的特殊字符。
  5. 命令太长的时候,可使用反斜杠(\)来转义回车键,使命令连续到下一行(注意,换行符属于特殊字符,而反斜杠后立刻接着特殊字符才能转义)。

此外,需要注意在Linux系统中英文大小写字母是不一样的,例如cd命令和CD并不同。

2. 实例

我们下面举几个命令的传参实例。

ls -al ~

ls为命令名。-al-a -l的简写,意为使用-a(列出包括隐藏文件在内的所有文件)与-l(列出文件属性)这两个选项。~ls命令的参数,意为家目录。

tar -xvf test3.zip -C .

tar为命令名。-xv意为使用-x(解压操作)与-v(可视化解压过程)这两个选项。-f意为指定压缩文件的名称,后面依附着test3.zip做为该选项的参数。-C意为指定解压后的目录,后面依附着.(当前目录)做为该选项的参数。

注意,-f test3.zip也可以写成--file test3.zip--file=test3.zip(为--开头的选项设置参数时都可以使用等号赋值)。

当我们直接在Shell中键入man command查看命令操作说明(manual)时,可以看到文档中对参数格式有详细描述:

TAR(1)                       General Commands Manual                      TAR(1)

NAME
tar – manipulate tape archives SYNOPSIS
tar [bundled-flags ⟨args⟩] [⟨file⟩ | ⟨pattern⟩ ...]
tar {-c} [options] [files | directories]
tar {-r | -u} -f archive-file [options] [files | directories]
tar {-t | -x} [options] [patterns]

像其他可执行程序(如Git)一般也会遵循类似的传参规范:

GIT(1)                             Git Manual                             GIT(1)

NAME
git - the stupid content tracker SYNOPSIS
git [--version] [--help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|-P|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--super-prefix=<path>] [--config-env <name>=<envvar>]
<command> [<args>]

可以看到,git在设置--开头的选项的参数时就希望我们采用=赋值方式,如--git_dir=/home/domain/.git,这种方式比--git_dir /home/domain/.git更为直观。

Python脚本的运行也采用类似的传参风格,如:

python3 search.py -v -p spam --pat=eggs foo.txt bar.txt -o results \
--speed=fast

具体如何用Python编写解析命令行选项的程序,我们下一节再展开叙述。

引用

  • [1] 鸟哥. 鸟哥的 Linux 私房菜: 基础学习篇[M]. 人民邮电出版社, 2018.

Linux:可执行程序的Shell传参格式规范的更多相关文章

  1. Shell传参的多种方式

    Shell 传参的多种方式 使用$1 $2 这种类似占位符的方式 # 命令行调用 start.sh 8080 9090 # 脚本中获取 port1=$1 # 8080 port2=$2 # 9090 ...

  2. shell传参和变量赋值

    1.变量赋值方式 (1)方式1--直接赋值(=) (2)方式2--read交互式赋值 (3)方式3--脚本传参赋值 2.read read -p "请输入你的名字和年龄:" nam ...

  3. shell传参给matlab问题解决办法

    之前需要通过shell脚本传参给matlab程序,但是遇到一些问题,现将我遇到的问题分享出来,给遇到同样问题的人一些借鉴. shell部分脚本Execl.sh: /usr/bin/python /ho ...

  4. Postman:传递的参数是List类型时 传参格式的写法

    Postman传递的参数是List类型 实体类中引用了一个List,泛型为其他实体类 参数是List集合时,Postman中参数格式如下图所示: 有不明白的地方,欢迎留言

  5. Linux程序编写shell script的格式

    #!/bin/bash #program # 在此处写下此程序的作用 #History: #此处写下写此程序的时间 作者 版本号 PATH=/bin:/sbin:/usr/bin:/usr/sbin: ...

  6. [Linux]Linux下signal function传参方式

    https://stackoverflow.com/questions/6970224/providing-passing-argument-to-signal-handler This is a r ...

  7. url地址形式的传参格式拼接

    例子一: var gid=pid=pizi=sn=newsn=sn_price=city_id=123; var params = 'gid=' +123; params += '&pid=' ...

  8. jmeter- Java-POST接口使用get与json格式传参

    在测试过程中发现各种接口传参形式,今天就来说说小编遇到的一种,接口请求方式为POST:URL传参以GET形式并携带JSON 可能这样诉说有不少同学不太理解. 如图: 上图所示就是一般get请求传参格式 ...

  9. 处理特殊格式的GET传参

    有群友问 这样的传参格式如何接受获取 xx.php?con="one"=>5,"two"=>0,"three"=>1 那么 ...

随机推荐

  1. Tomcat安装流程(无图简易)

    笔记:web->3小结

  2. C++函数声明的时候后面加const

    非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中,任意修改该类中成员的操作都是不允许的(因为隐含了 ...

  3. c源文件中为什么要包含自己对应的头文件

    另一篇:.c文件和.h文件的关系 引言: 我们经常在c工程中发现,源文件中要包含自己的头文件.一直以来,都不知道为什么这样做.现在,我知道了. 以前的认知: 我认为,.c文件没有必要包含自己的.h文件 ...

  4. 原生js造轮子之模仿JQ的slideDown()与slideUp()

    代码如下: const slider = (function() { var Slider = {}; // the constructed function,timeManager,as such ...

  5. IOS中弹出键盘后出现fixed失效现象的解决方案

    概述 这个问题常出现在移动web开发中聊天或者留言页面的绝对定位输入框上,页面超过屏幕大小时候输入框focus状态下(键盘弹出)绝对定位的元素失效,导致页面滚动时候把定位元素一并带走,体验十分不好,在 ...

  6. Hive启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument

    报错详细: Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preco ...

  7. js手机号隐藏中间四位

    var tel = "13122223333"; var reg = /^(\d{3})\d{4}(\d{4})$/; tel = tel.replace(reg, "$ ...

  8. BlockingCollection实现生产者消费者

    很简单的代码,看注释 class Program { private static ManualResetEvent _manualResetEvent = new ManualResetEvent( ...

  9. Spring基于注解自动装配

    前面我们介绍Spring IoC装载的时候,使用XML配置这种方法来装配Bean,这种方法可以很直观的看到每个Bean的依赖,但缺点也很明显:写起来非常繁琐,每增加一个组件,就必须把新的Bean配置到 ...

  10. JS/JQ动态创建(添加)optgroup和option属性

    JavaScript和Jquery动态操作select下拉框 相信在前端设计中必然不会少的了表单,因为经常会使用到下拉框选项,又或是把数据动态回显到下拉框中.因为之前牵扯到optgroup标签时遇到了 ...