0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何給你的Linux系統(tǒng)添加一個新的Linux命令

嵌入式悅翔園 ? 來源:嵌入式軟件開發(fā)交流 ? 作者:嵌入式軟件開發(fā)交 ? 2023-02-15 09:40 ? 次閱讀

前言

平時我們在shell命令行上輸入的命令都是應用程序,比如ls,ifconfig,vi等。我們下載的busybox源碼中就包含著這些程序源碼,那接下來我們來看看如何實現(xiàn)一個命令。

如何實現(xiàn)

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

gcc helloworld.c -o helloworld

上面的編譯指令中,gcc就是命令程序,然后后面的三個都是傳給它的參數(shù)。程序是如何獲取到參數(shù)的呢?我們都知道m(xù)ain函數(shù)的定義如下:

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

argc是參數(shù)個數(shù),argv是參數(shù)值。所以大家應該都知道如何獲取參數(shù)了吧。

有了參數(shù),我們就要進行解析了。這就有兩種方法:

對參數(shù)進行一個一個的判斷解析

使用getopt函數(shù)進行解析

第一種方式工作量非常大,所以我們來使用第二種方式。

getopt函數(shù)介紹

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

argc:參數(shù)個數(shù),直接將main函數(shù)中的argc傳給該函數(shù)。

argv:參數(shù)數(shù)組,直接將main函數(shù)中的argv傳給該函數(shù)。

optstring: 選項字符串。

里面還有幾個額外的全局變量:

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

optarg: 保存選項參數(shù)

optind: 記錄下一個檢索位置

opterr: 是否將錯誤信息輸出到stderr, 為0時表示不輸出

optopt: 不在選項字符串optstring中的選項

選項字符串

getopt函數(shù)中有個optstring參數(shù) ,就是選項字符串。用來指定選項,就比如上面gcc命令中的-o,它就是一個選項。

那如何給getopt傳遞選項字符串呢?舉個例子:

a:b:cd::e

這個選項字符串對應命令行就是-a ,-b ,-c ,-d, -e選項。

冒號表示參數(shù),一個冒號就表示這個選項后面必須帶有參數(shù)。這個參數(shù)可以和選項連在一起寫,也可以用空格隔開。

兩個冒號的就表示這個選項的參數(shù)是可選的,既可以有參數(shù),也可以沒有參數(shù),但要注意有參數(shù)時,參數(shù)與選項之間不能有空格。

實例

#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;
}

運行結(jié)果:

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

-b選項沒有跟參數(shù)則報錯!

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11171

    瀏覽量

    208474
  • Linux系統(tǒng)

    關注

    4

    文章

    588

    瀏覽量

    27266
  • 函數(shù)
    +關注

    關注

    3

    文章

    4260

    瀏覽量

    62229
  • 命令
    +關注

    關注

    5

    文章

    669

    瀏覽量

    21956
  • Shell
    +關注

    關注

    1

    文章

    361

    瀏覽量

    23234

原文標題:如何給你的Linux系統(tǒng)添加一個新的Linux命令

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux系統(tǒng)中unlink命令的使用

    Linux 中刪除文件,我們通常使用 rm 命令。除此以外,還有另外命令,可以用于刪除文件和鏈接,這就是 unlink
    發(fā)表于 09-13 14:29 ?2002次閱讀

    介紹些實用的Linux命令

    作為名軟件開發(fā)人員,掌握 Linux 命令是必不可少的技能。即使你使用 Windows 或 macOS,你總會遇到需要使用 Linux 命令
    發(fā)表于 08-01 16:12 ?332次閱讀
    介紹<b class='flag-5'>一</b>些實用的<b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux與用戶有關的命令

    Linux與用戶有關的命令 Linux與用戶有關的命令  passwd命令  出于系統(tǒng)安全考慮
    發(fā)表于 01-18 12:46 ?758次閱讀

    Linux系統(tǒng)管理命令

    Linux系統(tǒng)管理命令 Linux系統(tǒng)管理命令  wall
    發(fā)表于 01-18 12:47 ?797次閱讀

    Linux系統(tǒng)命令指南

    在“Linux 文件命令精通指南”中,我們討論了利用最基礎和最常用 Linux 文件命令所需的基本信息。在本文中,我將對 Linux
    發(fā)表于 05-23 10:23 ?938次閱讀

    Linux必學的系統(tǒng)安全命令

    新的挑戰(zhàn)。本文將重點介紹Linux系統(tǒng)安全的命令。 雖然Linux和Windows NT/2000系統(tǒng)一樣是
    發(fā)表于 11-02 15:09 ?0次下載

    linux常用命令實例詳解

    ,就必須從Linux命令學起,通過基礎的命令學習可以進步理解Linux系統(tǒng)。不同
    發(fā)表于 11-03 10:19 ?5507次閱讀

    你不可不知的11Linux命令

    Linux命令行吸引了大多數(shù)Linux愛好者。正常的Linux用戶
    發(fā)表于 11-09 12:14 ?1346次閱讀
    你不可不知的11<b class='flag-5'>個</b><b class='flag-5'>Linux</b><b class='flag-5'>命令</b>

    Linux系統(tǒng)管理命令整理及使用方法介紹

    linux命令是對Linux系統(tǒng)進行管理的命令。對于Linux
    的頭像 發(fā)表于 09-23 14:55 ?6775次閱讀

    Linux中的35find命令用法

    Linux查找命令Linux系統(tǒng)中最重要和最常用的命令。查找用于根據(jù)與參數(shù)匹配的文件指定的
    的頭像 發(fā)表于 02-02 16:53 ?3602次閱讀
    <b class='flag-5'>Linux</b>中的35<b class='flag-5'>個</b>find<b class='flag-5'>命令</b>用法

    LINUX操作系統(tǒng)的安裝與Linux常用文件命令

    LINUX操作系統(tǒng)的安裝與Linux常用文件命令說明。
    發(fā)表于 06-02 17:45 ?3次下載

    6有趣的Linux命令案例講解

    6有趣的Linux命令案例講解
    發(fā)表于 08-11 17:49 ?14次下載

    Linux操作必備150命令

    Linux 命令是對 Linux 系統(tǒng)進行管理的命令。對于 Linux
    發(fā)表于 11-12 09:19 ?423次閱讀

    常用Linux命令介紹

    linux命令是對Linux系統(tǒng)進行管理的命令。對于Linux
    的頭像 發(fā)表于 02-09 14:31 ?1005次閱讀

    shell命令linux命令樣嗎

    結(jié)合在起,形成相當于面向過程的程序,即shell script,從而實現(xiàn)些復雜的功能。 而Linux
    的頭像 發(fā)表于 11-08 10:51 ?2594次閱讀