您的位置:首页 > 运维架构 > Linux

Linux:可执行程序的Shell传参格式规范

2022-05-19 21:06 2561 查看

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

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

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

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

上述命令详细说明如下:

  1. 一行命令中第一个输入的部分绝对是命令(command)或可执行文件(例如Shell脚本)。
  2. 中括号
    []
    并不存在于实际的命令中,表示该参数是可选的,而加入选项设置时,通常选项前会带
    -
    符号,例如
    -h
    ;如果要使用选项的完整全名,选项前会带
    --
    符号,例如
    --help
  3. parameter1
    parameters2
    可以为依附在选项后面的参数,也可以为
    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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: