博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 命令行参数处理篇
阅读量:2393 次
发布时间:2019-05-10

本文共 1809 字,大约阅读时间需要 6 分钟。

Linux 遵循一种统一的命令行格式,通常有两种表达方式:短格式 vs 长格式。短格式是由一个"-"加上字符组成,如 -h、-v、-l filepath等等。而长格式是由两个"-"加一个单词组成,如 --help、--version、--load filepath等等。
◇ POSIX标准中关于程序名、参数的约定 ◇
程序名不宜少于2个字符且不多于9个字符。
程序名应只包含小写字母和阿拉伯数字。
选项名应该是单字符或单数字,且以短横 "-" 为前綴。
多个不需要选项参数的选项,可以合并,如 foo -a -b -c 等价于 foo -abc。
选项与其参数之间用空白符隔开。
选项参数不可选。
若选项参数有多值,要将其并为一个字串传进来,如 myprog -u "arnold joe jane"。
选项应该在操作数出现之前出现。
特殊参数 "--" 指明所有参数都结束了,其后任何参数都认为是操作数。
选项如何排列没什么关系。对互斥选项,若操作结果有覆盖关系,则最后一个选项起作用。
允许操作数的顺序影响程序行为,但需要作文档说明。
读写指定文件的程序应该将单个参数'-'作为有意义的标准输入或输出来对待。
◇ GNU长选项约定 ◇
对于已经遵循POSIX约定的GNU程序,每个短选项都有一个对应的长选项。
额外针对GNU的长选项不需要对应的短选项,仅仅推荐要有。
长选项可以缩写成保持惟一性的最短的字串。
选项参数与长选项之间或通过空白字符活通过一个'='来分隔。
选项参数是可选的(只对短选项有效)。
长选项允许以一个短横线为前缀。
☆ file one.c ☆
// code example  __one__
// by linpeitian
// mar 23 2007 @ linux
# include <stdio.h>
# include <getopt.h>
int main(int argc, char *argv[])
{
    int opt;
    // 短命令格式
    while ((opt = getopt(argc, argv, "hl:v")) != -1) {
        switch(opt) {
            case 'h':
                printf("choice - - > help\n");
                break;
            case 'l':
                printf("choice - - > load %s\n", optarg);
                break;
            case 'v':
                printf("choice - - > versioin\n");
                break;
            case '?':
                printf("unknown choice\n");
                break;
       }
    }
    return 0;
}
☆ file two.c ☆
// code example  __two__
// by linpeitian
// mar 23 2007 @ linux
# include <stdio.h>
# include <getopt.h>
int main(int argc, char *argv[])
{
    int opt;
    // 短命令格式
    const char *shortopts = "hl:v";
    // 长命令格式
    const struct option longopts[] = {
        {"help", 0, NULL, 'h'},
        {"load", 1, NULL, 'l'},
        {"version", 0, NULL, 'v'},
        {NULL, 0, NULL, 0}
    };
    while((opt = getopt_long(argc, argv, shortopts, longopts, NULL)) != -1) {
        switch(opt) {
            case 'h':
                printf("choice - - > help\n");
                break;
            case 'v':
                printf("choice - - > version\n");
                break;
            case 'l':
                printf("choice - - > load %s\n",  optarg);
                break;
            case '?':   // 未知命令参数
                printf("unknown choice\n");
                break;
            default:
                break;
        }
    }
    return 0;
}

转载地址:http://tchab.baihongyu.com/

你可能感兴趣的文章
poj 1775 && zoj 2358 Sum of Factorials
查看>>
zoj 1577 GCD & LCM
查看>>
zoj2000 Palindrome Numbers
查看>>
UVA100 The 3n + 1 problem
查看>>
hdu1754 I Hate It
查看>>
hdu 1166 敌兵布阵(求区间的和,单节点更新)
查看>>
hiho一下 第四十四周 题目1 : 博弈游戏·Nim游戏
查看>>
poj2299 Ultra-QuickSort(线段树计数问题)
查看>>
poj3264 Balanced Lineup(求区间的最大值与最小值之差)
查看>>
hdu4565 So Easy!(矩阵快速幂)
查看>>
poj2528 Mayor's posters(线段树,离散化)
查看>>
线段树多lazy-tag(两个)
查看>>
hdu4578(三个更新操作,三个求值操作)
查看>>
并查集(初级)小结
查看>>
Treap
查看>>
相似图片搜索——感知哈希算法
查看>>
编译原理 词法分析
查看>>
计算机系统结构 计算机系统结构的基本概念
查看>>
计算机系统结构 计算机指令集结构
查看>>
计算机系统结构 流水线技术-标量
查看>>