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. 『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别

    目录 1.CMD指令和ENTRYPOINT指令说明 2.CMD指令只有最后一条生效的原因 3.CMD指令演示 4.ENTRYPOINT指令演示 5.总结 CMD指令和ENTRYPOINT指令作用都是指 ...

  2. freeswitch对接WEBRTC的一个candidate问题

    概述 近几年,WEBRTC的完善与成熟,使得网页上使用webrtc的应用越来越多. Freeswitch是一个开源的软交换平台,可以直接支持webrtc的对接方式. 最近在测试fs和webrtc的对接 ...

  3. Markdown语法1

    Markdown是一种轻量级标记语言. Markdown 编写的文档可以导出 HTML .Word.图像.PDF.Epub 等多种格式的文档. Markdown 编写的文档后缀为 .md, .mark ...

  4. webSocket原理探索

    本文概述 Web Sockets的目标是在一个单独的持久连接上提供全双工.双向通信.在Javascript创建了Web Socket之后,会有一个HTTP请求发送到浏览器以发起连接.在取得服务器响应后 ...

  5. java中如何使用接口继承(Extending Interfaces)

    5.接口继承(Extending Interfaces)和通话talk的功能.而Moto888更为高级,除了照相和通话功能以外,还有mp3的功能.接口继承到底有什么意义呢?马克-to-win:1)通过 ...

  6. Linux环境下Eclipse中快捷键不起作用

    在window->Preferences->general->keys中, 找到 content asist 修改下边值 Binding 改成 Alt+/ When 改为 Editi ...

  7. git总是需要输入用户名密码问题解决

    解决办法: git bash进入你的项目目录,输入: git config --global credential.helper store 然后你会在你本地生成一个文本,上边记录你的账号和密码.当然 ...

  8. git-flow-avh的使用过程

    安装: 在mac上 brew install git-flow-avh 使用: 在仓库中 git flow init 一路回车就行,这个命令相当于写入一些默认命令流程到.git中, 此命令执行之后会增 ...

  9. Go 框架学习之旅 ① 深入解析 net/http 启动服务的层级逻辑

    Web Server. net/http 标准库怎么学. 库函数. 结构定义. 结构函数. 思维导图解析HTTP服务端. 层级逻辑. 创建框架的Server结构. OSI参考模型. TCP/IP五层模 ...

  10. HTTP和HTTPS有什么不同

    网站的URL会分为两部分:通信协议和域名地址. 域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言.网站中的通信协议一般就是HTTP协议和HT ...