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下写C程序,执行shell文件
- Linux下C程序插入执行shell脚本
- 【Linux】shell调用Java程序main方法通过crontab定时执行
- linux的shell执行程序时为什么需要加一个 "./"?
- Linux下shell执行程序
- linux下写C程序,执行shell文件
- Linux C 程序执行 shell 命令并获取返回结果的方法
- 工具接口标准(TIS)可执行链接格式(ELF)规范-卷III-操作系统特性-程序加载和动态链接(一)
- 从Linux程序中执行shell(程序、脚本)并获得输出结果
- Linux(Ubuntu)下设置开机启动shell脚本执行Java程序jar包
- linux下写C程序,执行shell文件
- Unix/Linux中后台运行程序(断开shell连接后继续执行)的几种方式
- 工具接口标准(TIS)可执行链接格式(ELF)规范-卷III-操作系统特性-程序加载和动态链接(三)
- linux下写C程序,执行shell文件
- Linux程序中执行shell(程序、脚本)并获得输出结果
- Linux C 程序执行 shell 命令并获取返回结果的方法
- Linux安装应用程序对程序文件owner/group和执行程序帐号设置的规范做法
- linux下写C程序,执行shell文件
- Shell脚本执行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell判断hdfs文件目录是否存在
- Linux环境中通过c程序执行shell脚本