0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何给你的Linux系统添加一个新的Linux命令

嵌入式悦翔园 来源:嵌入式软件开发交流 作者:嵌入式软件开发交 2023-02-15 09:40 次阅读

前言

平时我们在shell命令行上输入的命令都是应用程序,比如ls,ifconfig,vi等。我们下载的busybox源码中就包含着这些程序源码,那接下来我们来看看如何实现一个命令。

如何实现

我们先分析一下其他的命令,比如gcc:

gcc helloworld.c -o helloworld

上面的编译指令中,gcc就是命令程序,然后后面的三个都是传给它的参数。程序是如何获取到参数的呢?我们都知道main函数的定义如下:

int main(int argc, char * argv[])

argc是参数个数,argv是参数值。所以大家应该都知道如何获取参数了吧。

有了参数,我们就要进行解析了。这就有两种方法:

对参数进行一个一个的判断解析

使用getopt函数进行解析

第一种方式工作量非常大,所以我们来使用第二种方式。

getopt函数介绍

#include 
int getopt(int argc, char * const argv[], const char *optstring);

argc:参数个数,直接将main函数中的argc传给该函数。

argv:参数数组,直接将main函数中的argv传给该函数。

optstring: 选项字符串。

里面还有几个额外的全局变量:

extern char *optarg;
extern int optind, opterr, optopt;

optarg: 保存选项参数

optind: 记录下一个检索位置

opterr: 是否将错误信息输出到stderr, 为0时表示不输出

optopt: 不在选项字符串optstring中的选项

选项字符串

getopt函数中有个optstring参数 ,就是选项字符串。用来指定选项,就比如上面gcc命令中的-o,它就是一个选项。

那如何给getopt传递选项字符串呢?举个例子:

a:b:cd::e

这个选项字符串对应命令行就是-a ,-b ,-c ,-d, -e选项。

冒号表示参数,一个冒号就表示这个选项后面必须带有参数。这个参数可以和选项连在一起写,也可以用空格隔开。

两个冒号的就表示这个选项的参数是可选的,既可以有参数,也可以没有参数,但要注意有参数时,参数与选项之间不能有空格。

实例

#include 
#include 
int main(int argc, char * argv[])
{
    int ch;
    printf("optind:%d,opterr:%d
", optind, opterr);
    printf("--------------------------
");
    while ((ch = getopt(argc, argv, "abde::")) != -1)
    {
        printf("optind: %d
", optind);
        switch (ch) 
        {
           case 'a':
               printf("option: -a

");   
               break;
           case 'b':
               printf("option: -b
"); 
               printf("The argument of -b is %s

", optarg);
               break;
           case 'c':
               printf("option: -c
");
               printf("The argument of -c is %s

", optarg);
               break;
           case 'd':
               printf("option: -d
");
               break;
          case 'e':
               printf("option: -e
");
               printf("The argument of -e is %s

", optarg);
               break;
          case '?':
               printf("Unknown option: %c
",(char)optopt);
               break;
        }
    }


    return 0;
}

运行结果:

0cb2b6a2-ac6f-11ed-bfe3-dac502259ad0.png

-b选项没有跟参数则报错!

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11202

    浏览量

    208694
  • Linux系统
    +关注

    关注

    4

    文章

    590

    浏览量

    27307
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62316
  • 命令
    +关注

    关注

    5

    文章

    675

    浏览量

    21963
  • Shell
    +关注

    关注

    1

    文章

    363

    浏览量

    23255

原文标题:如何给你的Linux系统添加一个新的Linux命令

文章出处:【微信号:嵌入式悦翔园,微信公众号:嵌入式悦翔园】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux系统中unlink命令的使用

    Linux 中删除文件,我们通常使用 rm 命令。除此以外,还有另外命令,可以用于删除文件和链接,这就是 unlink
    发表于 09-13 14:29 2039次阅读

    介绍些实用的Linux命令

    作为名软件开发人员,掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS,你总会遇到需要使用 Linux 命令
    发表于 08-01 16:12 336次阅读
    介绍<b class='flag-5'>一</b>些实用的<b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux与用户有关的命令

    Linux与用户有关的命令 Linux与用户有关的命令  passwd命令  出于系统安全考虑
    发表于 01-18 12:46 759次阅读

    Linux系统管理命令

    Linux系统管理命令 Linux系统管理命令  wall
    发表于 01-18 12:47 799次阅读

    Linux系统命令指南

    在“Linux 文件命令精通指南”中,我们讨论了利用最基础和最常用 Linux 文件命令所需的基本信息。在本文中,我将对 Linux
    发表于 05-23 10:23 951次阅读

    Linux必学的系统安全命令

    新的挑战。本文将重点介绍Linux系统安全的命令。 虽然Linux和Windows NT/2000系统一样是
    发表于 11-02 15:09 0次下载

    linux常用命令实例详解

    ,就必须从Linux命令学起,通过基础的命令学习可以进步理解Linux系统。不同
    发表于 11-03 10:19 5523次阅读

    你不可不知的11Linux命令

    Linux命令行吸引了大多数Linux爱好者。正常的Linux用户
    发表于 11-09 12:14 1352次阅读
    你不可不知的11<b class='flag-5'>个</b><b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux系统管理命令整理及使用方法介绍

    linux命令是对Linux系统进行管理的命令。对于Linux
    的头像 发表于 09-23 14:55 6797次阅读

    Linux中的35find命令用法

    Linux查找命令Linux系统中最重要和最常用的命令。查找用于根据与参数匹配的文件指定的
    的头像 发表于 02-02 16:53 3617次阅读
    <b class='flag-5'>Linux</b>中的35<b class='flag-5'>个</b>find<b class='flag-5'>命令</b>用法

    LINUX操作系统的安装与Linux常用文件命令

    LINUX操作系统的安装与Linux常用文件命令说明。
    发表于 06-02 17:45 3次下载

    6有趣的Linux命令案例讲解

    6有趣的Linux命令案例讲解
    发表于 08-11 17:49 14次下载

    Linux操作必备150命令

    Linux 命令是对 Linux 系统进行管理的命令。对于 Linux
    发表于 11-12 09:19 429次阅读

    常用Linux命令介绍

    linux命令是对Linux系统进行管理的命令。对于Linux
    的头像 发表于 02-09 14:31 1025次阅读

    shell命令linux命令样吗

    结合在起,形成相当于面向过程的程序,即shell script,从而实现些复杂的功能。 而Linux
    的头像 发表于 11-08 10:51 2689次阅读