Linux:可执行程序的Shell传参格式规范
1. Linux下可执行程序的Shell传参格式规范
Linux下的可执行程序在运行时经常需要传一些参数,而这些参数是有规范的。包括我们自己写的在Linux系统下运行的Shell脚本、Python脚本等可执行程序,最好也遵循相关规范。我们下面以Linux命令为例来讲解参数规范:
Linux命令行的格式规范如下:
orion-orion@MyDesktop ~ % command [-options] parameter1 parameter2
上述命令详细说明如下:
- 一行命令中第一个输入的部分绝对是命令(command)或可执行文件(例如Shell脚本)。
- 中括号
[]
并不存在于实际的命令中,表示该参数是可选的,而加入选项设置时,通常选项前会带-
符号,例如-h
;如果要使用选项的完整全名,选项前会带--
符号,例如--help
。 parameter1
,parameters2
可以为依附在选项后面的参数,也可以为command
的参数。- 命令、选项、参数之间以空格来区分,无论空几格Shell都视为一格,所以空格是很重要的特殊字符。
- 命令太长的时候,可使用反斜杠(
\
)来转义回车键,使命令连续到下一行(注意,换行符属于特殊字符,而反斜杠后立刻接着特殊字符才能转义)。
此外,需要注意在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传参格式规范的更多相关文章
- Shell传参的多种方式
Shell 传参的多种方式 使用$1 $2 这种类似占位符的方式 # 命令行调用 start.sh 8080 9090 # 脚本中获取 port1=$1 # 8080 port2=$2 # 9090 ...
- shell传参和变量赋值
1.变量赋值方式 (1)方式1--直接赋值(=) (2)方式2--read交互式赋值 (3)方式3--脚本传参赋值 2.read read -p "请输入你的名字和年龄:" nam ...
- shell传参给matlab问题解决办法
之前需要通过shell脚本传参给matlab程序,但是遇到一些问题,现将我遇到的问题分享出来,给遇到同样问题的人一些借鉴. shell部分脚本Execl.sh: /usr/bin/python /ho ...
- Postman:传递的参数是List类型时 传参格式的写法
Postman传递的参数是List类型 实体类中引用了一个List,泛型为其他实体类 参数是List集合时,Postman中参数格式如下图所示: 有不明白的地方,欢迎留言
- Linux程序编写shell script的格式
#!/bin/bash #program # 在此处写下此程序的作用 #History: #此处写下写此程序的时间 作者 版本号 PATH=/bin:/sbin:/usr/bin:/usr/sbin: ...
- [Linux]Linux下signal function传参方式
https://stackoverflow.com/questions/6970224/providing-passing-argument-to-signal-handler This is a r ...
- url地址形式的传参格式拼接
例子一: var gid=pid=pizi=sn=newsn=sn_price=city_id=123; var params = 'gid=' +123; params += '&pid=' ...
- jmeter- Java-POST接口使用get与json格式传参
在测试过程中发现各种接口传参形式,今天就来说说小编遇到的一种,接口请求方式为POST:URL传参以GET形式并携带JSON 可能这样诉说有不少同学不太理解. 如图: 上图所示就是一般get请求传参格式 ...
- 处理特殊格式的GET传参
有群友问 这样的传参格式如何接受获取 xx.php?con="one"=>5,"two"=>0,"three"=>1 那么 ...
随机推荐
- 『现学现忘』Docker基础 — 36、CMD指令和ENTRYPOINT指令的区别
目录 1.CMD指令和ENTRYPOINT指令说明 2.CMD指令只有最后一条生效的原因 3.CMD指令演示 4.ENTRYPOINT指令演示 5.总结 CMD指令和ENTRYPOINT指令作用都是指 ...
- freeswitch对接WEBRTC的一个candidate问题
概述 近几年,WEBRTC的完善与成熟,使得网页上使用webrtc的应用越来越多. Freeswitch是一个开源的软交换平台,可以直接支持webrtc的对接方式. 最近在测试fs和webrtc的对接 ...
- Markdown语法1
Markdown是一种轻量级标记语言. Markdown 编写的文档可以导出 HTML .Word.图像.PDF.Epub 等多种格式的文档. Markdown 编写的文档后缀为 .md, .mark ...
- webSocket原理探索
本文概述 Web Sockets的目标是在一个单独的持久连接上提供全双工.双向通信.在Javascript创建了Web Socket之后,会有一个HTTP请求发送到浏览器以发起连接.在取得服务器响应后 ...
- java中如何使用接口继承(Extending Interfaces)
5.接口继承(Extending Interfaces)和通话talk的功能.而Moto888更为高级,除了照相和通话功能以外,还有mp3的功能.接口继承到底有什么意义呢?马克-to-win:1)通过 ...
- Linux环境下Eclipse中快捷键不起作用
在window->Preferences->general->keys中, 找到 content asist 修改下边值 Binding 改成 Alt+/ When 改为 Editi ...
- git总是需要输入用户名密码问题解决
解决办法: git bash进入你的项目目录,输入: git config --global credential.helper store 然后你会在你本地生成一个文本,上边记录你的账号和密码.当然 ...
- git-flow-avh的使用过程
安装: 在mac上 brew install git-flow-avh 使用: 在仓库中 git flow init 一路回车就行,这个命令相当于写入一些默认命令流程到.git中, 此命令执行之后会增 ...
- Go 框架学习之旅 ① 深入解析 net/http 启动服务的层级逻辑
Web Server. net/http 标准库怎么学. 库函数. 结构定义. 结构函数. 思维导图解析HTTP服务端. 层级逻辑. 创建框架的Server结构. OSI参考模型. TCP/IP五层模 ...
- HTTP和HTTPS有什么不同
网站的URL会分为两部分:通信协议和域名地址. 域名地址都很好理解,不同的域名地址表示网站中不同的页面,而通信协议,简单来说就是浏览器和服务器之间沟通的语言.网站中的通信协议一般就是HTTP协议和HT ...